我刚刚用java做了一个小项目,将.jar和application.properties打包到我的VPS中,并想在那里进行测试。该工具读取日志文件。
我在应用程序中指定了日志文件的路径。属性,如下所示:
LOGPATH=/folder1/folder2/logs/thelogIwant.log
路径解析如下:
public String makePath(String path) {
Properties prop = new Properties();
InputStream input = null;
try {
input = new FileInputStream("application.properties");
prop.load(input);
} catch (IOException ex) {
ex.printStackTrace();
} finally {
if (input != null) {
try {
input.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return prop.getProperty(path);
}
Path logFile = Paths.get(makePath("LOGPATH"));
它甚至似乎对右,正如错误消息所述:
SEVERE: /folder1/folder2/logs/thelogIwant.log (No such file or directory)
日志文件由另一个应用程序创建,因此位于我正在运行的.jar以外的另一个目录中。
该路径存在于我的VPS上,我可以导航到它并穿过它。 有人可以指出我正确的方向吗?这里出了什么问题?
我尝试过的事情:
- 使用"~/文件夹1/..." 指定路径
- 使用"文件夹 1/..." 指定路径
我可以想到一些可能的解释:
- 配置文件中的路径名是错误的;例如,有一个拼写错误或其他一些你没有注意到的差异。
- 您正在加载的属性文件与您认为的属性文件不同。
- 文件中的属性名称与工具使用的名称不匹配。
- 其他应用程序未创建日志文件
- 权限:您的工具可能以不允许读取路径上的某个目录的用户身份运行。
- 强制模式下的 SELinux 可以阻止应用程序(例如作为服务运行)访问文件。
- 同形文字,可以是属性文件1、源代码或文件系统中的文件名。
你尝试过的事情不太可能奏效。 正确的绝对路径名比相对路径名更健壮,Paths.get
不知道如何处理~
。 (~
的扩展是一个外壳功能...
我会试试这个:
- 修改您的工具以输出"LOGPATH"属性的值...括在引号字符中,以便您可以在值的开头/结尾看到任何虚假的空格字符。
- 运行该工具。 使用
- 复制和粘贴,查看是否可以完全使用工具使用的路径名打开文件。
简而言之,验证您实际使用的路径名是否是您期望的路径名。
1 - 实际上,经典格式属性文件以 LATIN-1 编码,因此这是不可能的。
我能够解决这个问题,谢谢@Steven你的帮助!
当文件所在的目录中时,我使用了 pwd 命令,并认识到真正的绝对路径以/home/myusername/folder1/...
现在工作正常。