小编Par*_*ife的帖子

如何使用java锁定文件(如果可能)

我有一个使用FileReader打开文件的Java进程.如何防止另一个(Java)进程打开此文件,或者至少通知第二个进程该文件已被打开?如果文件是打开的(这解决了我的问题),这是否会自动使第二个进程获得异常,或者我是否必须在第一个进程中使用某种标志或参数显式打开它?

澄清:

我有一个Java应用程序,它列出了一个文件夹,并打开列表中的每个文件进行处理.它会逐个处理每个文件.每个文件的处理包括读取它并根据内容进行一些计算,大约需要2分钟.我还有另一个Java应用程序执行相同的操作,而是写入文件.我想要的是能够同时运行这些应用程序,所以场景就是这样的.ReadApp列出文件夹并找到文件A,B,C.它打开文件A并开始读取.WriteApp列出文件夹并找到文件A,B,C.它打开文件A,看到它是打开的(通过异常或任何方式)并转到文件B. ReadApp完成文件A并继续到B.它看到它是开放的,继续到C. WriteApp没有至关重要 当ReadApp读取同一文件时写入,反之亦然.它们是不同的过程.

java file-io

114
推荐指数
5
解决办法
16万
查看次数

在maven中,如何在输出jar中的同一位置包含非java src文件?

我收到了一个源代码包.在src目录树里面有一些属性文件(.properties),我想把它们保存在同一个地方的输出jar中.例如:我想要

src/main/java/com.mycompany/utils/Myclass.java 
src/main/java/com.mycompany/utils/Myclass.properties
Run Code Online (Sandbox Code Playgroud)

在罐子里保持不变:

com.mycompany/utils/Myclass.class 
com.mycompany/utils/Myclass.properties
Run Code Online (Sandbox Code Playgroud)

无需将属性文件添加到单独的资源文件夹中.有没有办法告诉maven?

jar maven

43
推荐指数
2
解决办法
3万
查看次数

我应该在maven项目的路径中放置不被视为资源的配置文件

我有一个简单的java maven项目.执行时我的一个类需要从类路径加载xml配置文件.我不想在生成jar时打包这样的xml文件但是我想在conf子文件夹下的zip程序集中包含一个默认的xml文件,我也希望在单元测试中可以使用这个默认的xml来测试它.

在我看来,这个默认的xml有两个可能的位置:

  1. src/main/resources/conf/default.xml
  2. src/main/conf/default.xml

两种解决方案都需要特殊的pom动作

  • 在解决方案1中,我在构建期间将自动复制到目标文件夹,这意味着它在测试中可用,但我也在生产的jar中得到它,我不想要它.

  • 在解决方案2中,我得到了我想要的jar(没有xml)但我手动必须将xml复制到目标文件夹以供测试.(我不想在测试类路径中添加src的子文件夹.我认为这是不好的做法).

问题:两者的最佳解决方案是什么?
- 如果正确为2,将其复制到目标文件夹的最佳方法是什么?
- 有没有比这两个更好,更常见的其他解决方案?

(我还阅读了应该在哪里放置Maven项目的应用程序配置文件?但我想从"约定优于配置"的角度来了解最"正确的解决方案",这个链接提供了一些配置类型的解决方案,但没有任何约定但也许没有一个,但我还是要问.所提供的解决方案还包括AntRun插件和appAssembler插件,我想知道我是否可以完成它们.)

java maven-2 maven

37
推荐指数
1
解决办法
2万
查看次数

基于正则表达式的随机文本生成器

我想知道是否有软件,给定正则表达式,当然还有一些其他约束,如长度,产生始终匹配给定正则表达式的随机文本.谢谢

regex

27
推荐指数
5
解决办法
2万
查看次数

在将一些节点添加到底层模型后,如何刷新JTree?

首先,我要说我不使用DefaultTreeModel.我实现了自己的TreeModel,所以我不能使用DefaultXXX.问题是:通过我的模型定义的一些addStuff()方法,我将节点添加到底层数据结构.然后我通过调用addStuff()函数中的treeNodesChanged()来通知监听器(我知道有treeNodesInserted方法,但它是一样的.它只是用不同的方法通知监听器).现在,其中一个监听器是我的主窗体中的静态类,这个监听器可以告诉JTree,它也包含在我的主窗体中,用于刷新自身.如何告诉JTree从模型中"重新加载"其部分或全部节点?

更新:发现这个问题虽然不完全相同,但它给出了我想要的答案.

更新2:我的问题不是如何通知查看器(JTree),而是在模型通知后应该以什么方式重新加载jtree.

首先让我说,我知道刷新树以反映底层更改的唯一方法是调用updateUI(),或重用setModel()方法.基本上,我的问题是:

假设TreeModelListener刚刚通过(通过TreeModelListener API)通知模型中发生了更改.好的,现在呢?

我有这个问题,因为JTree没有实现TreeModelListener.因此,在我的情况下,监听器是JTree的容器,或实现监听器的内部类,与Jtree位于同一容器中.

所以假设我是一个TreeModelListener实现,和我的兄弟JTree一起幸福地生活在一个JForm中.突然我的方法treeNodesInserted(TreeModelEvent evt)被调用.现在我该怎么做?如果我从我内部调用Jtree.updateUI(),那么模型的侦听器List会抛出ConcurrentModification异常.我可以调用updateUI以外的其他东西吗?

我尝试了很多东西,但只有updateUI刷新了JTree.所以我在听众之外做了.从JForm,我只是调用模型的方法来改变不正常的结构,然后我调用updateUI.没有使用TreeModelListener.

UPDATE3:我发现注册了隐式TreeModelListeners.在我的模型的addTreeModelListener(TreeModelListener监听器)实现中,我放了一个debug system.out行:

System.out.println("listener added: " + listener.getClass().getCanonicalName());
Run Code Online (Sandbox Code Playgroud)

当我执行jTree.setModel(model)时,我看到了这个调试输出:

监听器添加:javax.swing.JTree.TreeModelHandler

监听器添加:javax.swing.plaf.basic.BasicTreeUI.Handler

引发ConcurrentModificationException是因为对jtree.updateUI()的调用会重新注册侦听器(只有plaf,而不是两者),因此当我在侦听器通知循环中调用updateUI时会抛出它.现在刷新树的唯一方法是在TreeModelListener之外进行.有关更好解决方案的任何意见或想法吗?我错过了什么吗?

java swing jtree

16
推荐指数
4
解决办法
6万
查看次数

如何使用maven资源也作为测试资源

我有一个maven项目,它加载一个xslt文件并执行转换以及对结果的其他处理.通常,当用户运行应用程序时,用户提供要加载的xslt文件路径.但是我在我的应用程序中包含了一些默认的xslt文件,用户无需加载任何外部xslt文件即可使用这些文件.我这样做是通过将它们添加到src/main/resources/xslt.我的问题是我想在测试阶段对那些xslt文件运行测试.我怎样才能做到这一点?我应该将src/main/resources/xslt内容复制到target/somewhere并在我的测试类代码中加载它们吗?哪个插件用于此?

maven-2 unit-testing

12
推荐指数
1
解决办法
6986
查看次数

我怎样才能取消合格方法?

在开发过程中,我定义了一个'initialize-instance:after'方法,该方法不再需要一段时间了,实际上是在我的方式中,因为在它内部调用的代码不再有效.由于unintern函数没有限定符的参数,有什么方法可以"unintern"方法的符号限定符组合,这样我就不必再使用slime-restart-inferior-lisp并从中再次加载项目开始?

lisp common-lisp slime

9
推荐指数
2
解决办法
1015
查看次数

在常见的lisp中,如何以便携方式检查对象的类型

我想定义一个方法,专门用于具有无符号字节8元素的数组类型的对象.在sbcl中,当您(make-array x :element-type '(unsigned-byte 8))通过SB-KERNEL :: SIMPLE-ARRAY-UNSIGNED-BYTE-8实现对象类时.是否有一种独立于实现的方式专门研究无符号字节数组类型?

lisp common-lisp

9
推荐指数
1
解决办法
3005
查看次数

在lisp中,我如何测量和捕获评估表达式所花费的时间?

我想捕获对time宏调用的结果,以便收集多个测量并处理它们.我尝试在本地setf标准输出并将其重定向到字符串,但它不适用于time宏.也许这是错的,但我尝试的是:

(with-output-to-string (str)
    (let ((*standard-output* str))
        (time (test-with-size 40))))
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 是一种捕获输出的方法time
  2. 如果没有,我可以捕获slime-profile-report命令的输出吗?
  3. 如果以上都不起作用,我如何衡量评估任意表达式所花费的时间?

我想要实现的是测量算法的运行时间,因为输入的大小增加,因此对于每个输入大小(范围从1到100),我将测量很多次并保持平均值.然后我想绘制结果.绘图很简单,我在Cliki中找到了很多方法,但我如何收集结果呢?

我正在使用CLISP和CCL.

编辑:保罗内森指出time宏观输出*trace-output*是一个解决方案.我想要一个更好,更简单的解决方案,因为有了这个,我必须解析一个特定于实现的跟踪.

lisp common-lisp

8
推荐指数
1
解决办法
1043
查看次数

我如何告诉nginx默默地忽略不匹配的请求,让它们超时而不是给404

我有一个服务器块,它监听特定服务器名称上的80个端口请求以及一些位置指令.我如何让nginx处理任何不匹配的请求,好像它没有收到它,那就让它超时?目前,这些请求被处理404错误

nginx

8
推荐指数
2
解决办法
3060
查看次数

标签 统计

common-lisp ×3

java ×3

lisp ×3

maven ×2

maven-2 ×2

file-io ×1

jar ×1

jtree ×1

nginx ×1

regex ×1

slime ×1

swing ×1

unit-testing ×1