Java(Linux)中的文件路径

Java(Linux)中的文件路径,java,linux,file-io,Java,Linux,File Io,我已经创建了一个Java应用程序,它从conf.properties文件加载一些配置,该文件位于src/文件夹中 当我在Windows上运行这个应用程序时,它工作得非常好。但是,当我尝试在Linux上运行它时,它会抛出以下错误: java.io.FileNotFoundException: src/conf.properties (No such file or directory) 我会检查你的斜杠,windows经常使用“\”和linux的“/”作为文件路径 编辑:由于您的路径看起来不错,

我已经创建了一个Java应用程序,它从
conf.properties
文件加载一些配置,该文件位于
src/
文件夹中

当我在Windows上运行这个应用程序时,它工作得非常好。但是,当我尝试在Linux上运行它时,它会抛出以下错误:

java.io.FileNotFoundException: src/conf.properties (No such file or directory)

我会检查你的斜杠,windows经常使用“\”和linux的“/”作为文件路径


编辑:由于您的路径看起来不错,可能是应用程序的文件权限或执行路径不同?

尝试使用双斜杠,在JBoss中完成操作后,我经常不得不重构代码以使用双斜杠

您要做的是签出并查找
文件.separator
。静电也会把你带到那里

这将允许您为正在运行的任何系统构建本机路径


(如果这确实是问题所在。有时我喜欢获取当前目录,只是为了确保我认为正在运行的目录就是我真正正在运行的目录。)

您应该检查应用程序的工作目录。也许它不是您假设的那个,这就是为什么“src”目录不存在的原因


一个简单的检查方法是尝试绝对路径(仅用于调试!)。

检查您的权限。例如,如果您(或者更确切地说,运行Java进程的用户)没有读取文件的适当权限,您将收到此错误消息

这是典型的Windows->Linux迁移问题。从提示符运行时,
ls-lsrc/conf.properties
显示什么


此外,检查资本化。Windows不区分大小写,因此,如果该文件实际上被称为CONF.properties,它仍然会被找到,而在Linux上这两个文件将被视为不同的文件。

如果您指向该文件的路径是相对的,我还将检查您当前的工作目录。您只需要做一个
文件测试=新文件(“.”)
然后打印该文件的规范路径名

如果使用System.getProperty()引用任何其他位置,如
user.dir
或类似的位置,则至少需要验证用作相对根的目录是否在您认为的位置

另外,如前所述,请检查用作文件路径分隔符的斜杠。尽管您始终可以使用“/”并且它可以工作

如果你绝对地引用路径,如果你做一些愚蠢的事情,比如硬编码位置,你将很难在一个操作系统和另一个操作系统之间切换。

而不是

String PROP_FILENAME="src/conf.properties";
使用


查看API了解更多详细信息:

检查斜杠和冒号 在我的例子中,我将PS1设置为以下值

PS1='\n[\e[1;32m]$SYSNAME(\u)@[\e[1;33m]\w[\e[1;36m](\d\T)[!]\e[0m]\n\$'

我正在尝试从env.例如system.getenv读取数据

Java正在抛出异常


java.lang.IllegalArgumentException:格式错误\uxxx编码

如果您已将应用程序打包到jar文件中,而jar文件又包含属性文件,则应使用以下方法。这是分发java程序时的标准方法

URL pUrl = this.getClass().getResource("/path/in/jar/to/file.properties");

Properties p = new Properties();
p.load(pUrl.openStream());

路径中的/指向jar文件中的根目录。

这是文件名:public static final String PROP\u filename=“src/conf.properties”在java的'/'下,即使在Windows系统上也能很好地工作,实际上VisualC++也能处理“//'”。但是,“Windows”也很好,在Linux中不是那么多。如果你把一个“路径”放在Windows中,你就需要从它中得到它,因为它是转义符。如果你使用它,那么你就不需要逃避它。谢谢你的额外信息,我是。谈到JBoss上下文和我使用它的经历和磨难:)你能展示一下相关的代码吗?根据Myles在回答中的一条评论,这是文件名:public static final String PROP_filename=“src/conf.properties”问题是他使用的是相对路径,因此依赖于当前的工作目录。谢谢你的回复Bjorn和大家。我刚刚用WinRAR解压了JAR文件,发现根本没有src/目录,src/的所有内容都在根目录中。我不知道JAR会像我只是使用了Bjorn提到的方法,并将路径设置为“/conf.properties”再次感谢。当使用jar打包时,您的目录结构不应该改变。也许您的IDE中有一些移动文件的设置?我使用的是Eclipse,我从未接触过任何此类设置。它是一个独立的应用程序,我将其导出为可运行的jar。不过,我将了解Eclipse如何提供此类设置嗯。
URL pUrl = this.getClass().getResource("/path/in/jar/to/file.properties");

Properties p = new Properties();
p.load(pUrl.openStream());