我试图运行一个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线params在两种情况下都能正确显示。 我想知道shell是否实际上为这些参数添加了一些有趣的看不见的字符。
答案 0 :(得分:0)
正如您在文件列表中看到的那样,只有root作为写入文件的权限。这也意味着只有root才能打开它。
我认为你的应用程序没有以root身份运行,因此你应该首先尝试更改文件的权限:
chmod 666
此命令将允许每个人读取和写入文件。
此致