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
在Linux下从其他工作路径运行java文件_Java_Linux - Fatal编程技术网

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

在Linux下从其他工作路径运行java文件,java,linux,Java,Linux,我有以下简单的java应用程序,可以打开一个文件进行读取。我已经将其编译成run.jar文件,然后在/var/project下复制run.jar文件,并在其附近复制file.txt 当我键入“java-cp run.jar com.text.FileMain” 一切都很好 但是,当将我的目录更改为let say“/tmp”然后键入以下命令时,我出现了一个错误“找不到file.txt文件” 实际上,这是预期的结果。我可以做什么来运行这个应用程序而不更改代码,因为它是一个API,不允许我更改它 可能

我有以下简单的java应用程序,可以打开一个文件进行读取。我已经将其编译成run.jar文件,然后在
/var/project
下复制run.jar文件,并在其附近复制file.txt 当我键入
“java-cp run.jar com.text.FileMain”
一切都很好

但是,当将我的目录更改为let say
“/tmp”
然后键入以下命令时,我出现了一个错误“找不到
file.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)
$java-cp/var/project/run.jar com.test.FileMain
java.io.FileNotFoundException:file.txt(无此类文件或目录)
在java.io.FileInputStream.open(本机方法)
位于java.io.FileInputStream。(FileInputStream.java:120)
位于java.io.FileReader。(FileReader.java:55)
位于com.test.FileMain.main(FileMain.java:20)
$pwd /tmp

package.com.test;
导入java.io.BufferedReader;
导入java.io.File;
导入java.io.FileNotFoundException;
导入java.io.FileReader;
导入java.io.IOException;
导入java.util.ArrayList;
导入java.util.List;
公共类FileMain{
公共静态void main(字符串[]args){
列表=新的ArrayList();
File File=新文件(“File.txt”);
BufferedReader reader=null;
试一试{
reader=newbufferedreader(newfilereader(file));
字符串文本=空;
而((text=reader.readLine())!=null){
add(Integer.parseInt(text));
}
}catch(filenotfounde异常){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}最后{
试一试{
if(读卡器!=null){
reader.close();
}
}捕获(IOE异常){
}
}
//把清单打印出来
系统输出打印项次(列表);
}
}
更换

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


文件在目录命名空间中有一个位置。“file.txt”指当前目录中的此文件。当您的cd/tmp“file.txt”不存在时。要修复将完全限定路径传递到main而不是硬代码“file.txt”中的问题,那么您可以将“/tmp/file.txt”传递到您的代码中,所有这些都应该很好

您可以在/tmp>中创建指向file.txt的软链接

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

您可以使用脚本运行代码

在脚本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”可以授予执行权限,应该可以

从提示符运行它


您是否也更改了文件的目录,还是仅更改了jar。根据代码,文件应该出现在java程序执行的目录中,而不是jar的路径中,无论如何,因为您无法更改代码,所以您需要在执行之前添加一些脚本来将文件移动到所需的路径。

我不这么认为,最好的选择是在主参数中指定文件完整路径。如果有任何答案有帮助,则应将其标记为正确。为什么?看答案告诉我,除了代码更改外,没有其他解决方案。制作软链接或使用脚本如何构成代码更改?或者为什么这两个都不适合你呢?所有这些都是解决办法。如果有很多点可以启动应用程序,那么会有很多软链接,但不知道如何使用更通用的方法。
ln -s /var/project/file.txt /tmp
#!/bin/bash
/var/project
java -cp /var/project/run.jar com.test.FileMain
$ /var/project/run.sh