我有一个使用FileReader打开文件的Java进程.如何防止另一个(Java)进程打开此文件,或者至少通知第二个进程该文件已被打开?如果文件是打开的(这解决了我的问题),这是否会自动使第二个进程获得异常,或者我是否必须在第一个进程中使用某种标志或参数显式打开它?
我有一个Java应用程序,它列出了一个文件夹,并打开列表中的每个文件进行处理.它会逐个处理每个文件.每个文件的处理包括读取它并根据内容进行一些计算,大约需要2分钟.我还有另一个Java应用程序执行相同的操作,而是写入文件.我想要的是能够同时运行这些应用程序,所以场景就是这样的.ReadApp列出文件夹并找到文件A,B,C.它打开文件A并开始读取.WriteApp列出文件夹并找到文件A,B,C.它打开文件A,看到它是打开的(通过异常或任何方式)并转到文件B. ReadApp完成文件A并继续到B.它看到它是开放的,继续到C. WriteApp没有至关重要 当ReadApp读取同一文件时写入,反之亦然.它们是不同的过程.
这是我之前提出的问题的后续问题:
我没有得到一个很好的解决方案(因为似乎没有一个),但我有一个相关的问题:
无论如何用Java代码(Windows中的.exe,而不是Java应用程序)启动应用程序,并让它开始最小化?或者也许在开始后立即将其最小化?这将解决另一个问题的焦点问题,而已经存在的问题或多或少会自行处理.
再次澄清问题:Java客户端和.exe在Windows中运行,我真的没有能力编写任何包装器或使用JNI mojo或类似的东西.我或多或少需要一个纯Java解决方案.
再次感谢您的帮助,我非常愿意接受一个简单的答案:"这是不可能的."
我正在研究基于Java的桌面应用程序.一个要求是,如果应用程序正在运行并且用户尝试再次启动应用程序,则应该执行类似于显示某些警报等操作.
我使用文件,当用户运行应用程序时,它将一些文本添加到文件中并将其保存在本地系统的某个位置,当用户再次尝试运行应用程序时,我检查文件并相应地处理情况,但是存在一些问题与此相反,如果应用程序异常终止,我无法删除该文件,在这种情况下,当用户尝试运行应用程序系统时,显示应用程序已在运行但实际应用程序异常终止的警报.
我做了一些研发,发现我可以阅读Windows任务管理器列表然后我可以检查我的应用程序是否正在运行.它工作正常但在测试期间我遇到了一个问题,即在Windows中有一个名为"tasklist"的软件/实用工具转到"开始 - >运行"并输入任务列表它将显示任务列表.如果您的系统上未安装此实用程序或由于某种原因删除/损坏此实用程序,则此操作无效,并且用户可以多次启动该应用程序的同样问题.这是访问taskmanager项的代码
Process p = Runtime.getRuntime().exec(
System.getenv("windir") + "/system32/" + "tasklist.exe");
BufferedReader input = new BufferedReader(new InputStreamReader(
p.getInputStream()));
while ((line = input.readLine()) != null) {
/*
Make the comparison here and show alert.
*/
Run Code Online (Sandbox Code Playgroud)
}
问题:检查应用程序是否已在运行的好方法是什么?我正在使用Java进行应用程序,并使用高级安装程序来创建应用程序的安装程序.