Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.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
Java 为什么在linux上存在FileNotFoundException时引发它_Java_Linux_File - Fatal编程技术网

Java 为什么在linux上存在FileNotFoundException时引发它

Java 为什么在linux上存在FileNotFoundException时引发它,java,linux,file,Java,Linux,File,这是我第一次在linux上用Java访问文件时遇到这样的问题。这个问题就像标题所说的-FileNotFoundException是在文件实际存在时抛出的。此外,具有相同配置(props.txt文件)的应用程序在windows上运行时也应该如此。 让我提供一点控制台输出 datasu@dedi2392:~/netcrawler/dkpto$ ls -l total 20 -rwxrw-rw- 1 datasu datasu 114 Aug 7 15:53 autoupdate drwxr-xr

这是我第一次在linux上用Java访问文件时遇到这样的问题。这个问题就像标题所说的-
FileNotFoundException
是在文件实际存在时抛出的。此外,具有相同配置(props.txt文件)的应用程序在windows上运行时也应该如此。 让我提供一点控制台输出

datasu@dedi2392:~/netcrawler/dkpto$ ls -l total 20 -rwxrw-rw- 1 datasu datasu 114 Aug 7 15:53 autoupdate drwxr-xr-x 4 datasu datasu 4096 Aug 8 11:57 data drwxr-xr-x 2 datasu datasu 4096 Aug 8 11:57 log -rw-rw-rw- 1 datasu datasu 32 Aug 8 12:44 props.txt -rwxrw-rw- 1 datasu datasu 126 Aug 8 12:55 propsUpdate datasu@dedi2392:~/netcrawler/dkpto$ ./propsUpdate Parent: /usr/home/datasu/netcrawler/dkpto 1# -> propsUpdate 2# -> autoupdate 3# -> props.txt 4# -> data 5# -> log (No such file or directory)ava.io.FileNotFoundException: /usr/home/datasu/netcrawler/dkpto/props.txt at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.(Unknown Source) at netcrawler.Autoupdater.readProperties(Autoupdater.java:71) at netcrawler.Autoupdater.start(Autoupdater.java:54) at netcrawler.Autoupdater.main(Autoupdater.java:47) datasu@dedi2392:~/netcrawler/dkpto$ java -version java version "1.6.0_45" Java(TM) SE Runtime Environment (build 1.6.0_45-b06) Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode) datasu@dedi2392:~/netcrawler/dkpto$
那么为什么
props.txt
文件实际存在时却找不到它呢?

您的主文件夹真的是这个路径吗

/usr/home/datasu
/home/datasu
是它在linux上的正常位置

另外,请尝试将该行更改为:

properties.load(new FileInputStream(new File(args));

如果您将其称为
/propsUpdate./props.txt
,它将从当前工作目录工作。

字符串“args”的结尾可能有一个非打印字符,如空格。在使用该变量之前,可以使用String.trim()删除这些字符。

正确的路径真的是
/usr/home/datasu/
?我不知道您的linux/unix版本,但它通常不是在
/home/…
上吗?特别是因为您在第一行中显示了
~/
,这是主目录。以下是PWD结果:datasu@dedi2392:~/netcrawler/dkpto$pwd->/usr/home/datasu/netcrawler/dkpto传递给
readProperties
args
的确切语法是什么?请尝试分离
文件输入流
new File
如下:
File File File=new File(args)
File=File.getAbsoluteFile()
FileInputStream fis=new FileInputStream(File)
这样我们可以获得更多信息此路径是正确的,因为您可以启动应用程序,并且父文件夹也可以用这样的路径列出(检查生成它的代码)你提供的代码是第一个版本,我已经改变它来查看异常中文件的完整路径。请考虑路径是绝对的,所以工作目录不应该影响它。而且,路径是由java创建的,并且相同的代码在Windows上运行得很好。哇,这太蠢了。我有双重检查午餐SCRI。文件名中有一些空格等,但什么也没有。不过,修剪参数就成功了。谢谢你的建议。今天的教训:永远不要相信命令行传递的参数。有没有办法让VI,VIM显示不可打印的内容?你可以总是
回显$arg | hextdump-C
0x0D0A
序列等等s我猜carret返回正确吗?。当将args数组传递到main时,JVM不应该删除它吗?我以前从来没有遇到过这样的问题,
0d
是回车,而
0a
是换行符。@antoniosss我猜是您的
属性。load
是在
cr
nl
后面追加的。
properties.load(new FileInputStream(new File(args));