我正在尝试运行一个java命令提示符程序,该程序接收5gb csv文件的路径。虽然路径保证是正确的,并且我以root用户身份运行程序,但我的程序抛出:
(No such file or directory)ava.io.FileNotFoundException: /data/tmp/NPPES/npidata.csv
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:146)
at java.io.FileInputStream.<init>(FileInputStream.java:101)
at java.io.FileReader.<init>(FileReader.java:58)
...
java系列是:
BufferedReader file = new BufferedReader( new FileReader(args[1]));
文件列表:
-rw-r--r-- 1 root root 4 Mar 11 15:35 empty.csv
-rw-r--r-- 1 root root 5097950480 Feb 11 00:36 npidata.csv
然后我想可能是文件大小,所以我创建了一个4个字符的文件。还是没什么。以前有人经历过这种情况吗?
更新:
我修改了java程序以列出所有接收参数,并且它们显示正确。
我通过一个shell脚本launch.sh运行该程序,其内容如下:
# !/bin/sh
# echo on
java -Xmx16000M -XX:MaxPermSize=512M -classpath "../classes:../lib/*" $@
当我直接用java运行它时,它工作了:找到了文件。
最大的错误是cmd行参数在这两种情况下都显示正确。我想知道shell是否真的在那些参数中添加了一些有趣的看不见的字符。
1条答案
按热度按时间ufj5ltwl1#
正如您在文件列表中所看到的,只有根作为对文件的写入权限。也就是说只有根才能打开它。
我认为您的应用程序没有以root用户身份运行,因此您应该首先尝试更改文件的权限:
chmod 666
这个命令将允许每个人读写文件。真诚地,