在Linux下从其他工作path运行java文件

我有以下简单的Java应用程序,打开一个文件来阅读。 我已经编译成run.jar文件,然后复制/var/project下的run.jar文件也复制附近的file.txt当我input"java -cp run.jar com.text.FileMain"一切都很好

但是,当改变我的目录让可以说"/tmp"然后键入下面的命令,我有一个错误“无法findfile.txt文件”。 实际上它是预期的结果。 我可以做什么来运行这个应用程序,而不需要改变代码,因为它是一个API,我不能改变它。

可能吗?

 $ java -cp /var/project/run.jar com.test.FileMain java.io.FileNotFoundException: file.txt (No such file or directory) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.<init>(FileInputStream.java:120) at java.io.FileReader.<init>(FileReader.java:55) at com.test.FileMain.main(FileMain.java:20) 

$ pwd / tmp

 package com.test; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class FileMain { public static void main(String[] args) { List<Integer> list = new ArrayList<Integer>(); File file = new File("file.txt"); BufferedReader reader = null; try { reader = new BufferedReader(new FileReader(file)); String text = null; while ((text = reader.readLine()) != null) { list.add(Integer.parseInt(text)); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (reader != null) { reader.close(); } } catch (IOException e) { } } // print out the list System.out.println(list); } } 

您可以使用脚本运行代码。

在脚本cd到/ var / project文件夹,然后给java命令。 脚本运行后,你应该回到/ tmp目录。 但是java会运行/ var / project,从而找到文件。

脚本的示例源

 #!/bin/bash /var/project java -cp /var/project/run.jar com.test.FileMain 

保存到“/var/project/run.sh”给予执行的权限,应该没问题

从提示符运行它

 $ /var/project/run.sh 

你可以在你的/ tmp里创建一个到file.txt的软链接

 ln -s /var/project/file.txt /tmp 

更换

 File file = new File("file.txt"); 

  File file = new File("./file.txt"); 

文件在目录名称空间中有一个位置。 “file.txt”表示当前目录中的这个文件。 当你cd / tmp“file.txt”不在那里。 要修复通过完全合格的路径到主要而不是硬编码“file.txt”所以你传递“/tmp/file.txt”到你的代码,一切都应该很好

你是否改变了文件的目录,或只改变了文件夹。 根据代码,文件应该存在于执行java程序的目录中,而不是jar的路径,无论如何,因为你不能改变代码,你的代码添加一些脚本来移动文件到所需的路径执行。