Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我的bash脚本在Java需要读取文件时锁定该文件_Java_Linux_Bash_File_Io Redirection - Fatal编程技术网

我的bash脚本在Java需要读取文件时锁定该文件

我的bash脚本在Java需要读取文件时锁定该文件,java,linux,bash,file,io-redirection,Java,Linux,Bash,File,Io Redirection,我在Linux(CentOS)中有一个bash脚本,可以将输出重定向到文件。运行需要几分钟: ./myBashScript.sh >> file.csv 我有一个java应用程序,它尝试读取文件(仅读取)以进行进一步处理: File file = new File("file.csv"); Scanner input = new Scanner(file); while (input.hasNextLine()) {

我在Linux(CentOS)中有一个bash脚本,可以将输出重定向到文件。运行需要几分钟:

./myBashScript.sh >> file.csv
我有一个java应用程序,它尝试读取文件(仅读取)以进行进一步处理:

    File file = new File("file.csv");
            Scanner input = new Scanner(file);
            while (input.hasNextLine()) {
                String line = input.nextLine();
                // do something...
            }
这些进程位于
Crontab
上。它工作得很好,但显然,每当bash脚本将输出重定向到文件时,Java应用程序都无法读取它。日志显示
“未找到文件”
异常


文件锁上了吗?!如何解决此问题?

好的。显然,我只需要确保bash已经完成,然后运行Java应用程序。或者,一旦整个bash完成,只需重命名它!这些技巧应该可以解决问题。

…请注意,如果“看不懂”的意思是“可以看,但它是空的”,那是一个完全不同的问题(可能与此有关)。@TinaJ,…您引用的bash代码没有锁定。可能是您的操作系统或文件系统有限制,但POSIX标准Unixlikes上的情况并非如此。“文件不存在”/“未找到文件”不是锁定问题;被锁定的文件会产生完全不同的错误。确保您的Java代码使用正确的名称、正确的目录等查找。请包含所有必要的详细信息,以便让其他人自己看到问题。请记住,由
cron
启动的进程可能会将
/
作为其工作目录,而不是用户的主目录或其他情况下的默认目录……因此,最好从
文件(“File.csv”)
更改为
文件(“/home/someuser/File.csv”)
,视实际位置而定;看看这是否会给你一个更具体的有用的错误消息。如果这是你想做的,考虑使用咨询锁定。code>flock-x file.csv./myBashScript>>file.csv和
flock-x file.csv java-jar myJavaProgram.jar file.csv
将确保一次只有一个进程持有锁。NMDV。尽管如此,尽管确保Java程序不与
bash
脚本同时运行确实可以解决您的问题,但这可能是因为您询问的脚本命令以外的其他地方的两个脚本之间存在不兼容。如果需要重命名文件,那么这就更说明了一个不同的问题。也就是说,如果这个答案中描述的方法解决了FileNotFoundException,那么它只是偶然地解决了它(作为重写实际导致错误的代码的副作用)。@charlesduff,如果一个或另一个程序删除了锁文件,
flock
方法在提供互斥方面不是无效的吗?@JohnBollinger,绝对正确。如果任何一个程序正在删除该文件,则需要将该逻辑纳入问题的范围(并且锁文件可能应该与数据文件分开作为一个单独的inode)。