Java 如何为在.jar中使用的运行时/进程指定文件路径?

Java 如何为在.jar中使用的运行时/进程指定文件路径?,java,jar,filepath,powershell-core,Java,Jar,Filepath,Powershell Core,我正在java中运行一些powershell脚本,我已经完成了我的程序,但现在我不确定如何将其打包到可执行文件.jar中,同时仍然能够使用这些脚本。我已将脚本放在项目文件中(与src文件夹处于同一级别) & 我知道.class.getResourceAsStream(“ipScan.ps1”)可能会起作用,但如何将其用作运行扫描字符串第二部分的字符串 我也不确定如何为FileWriter指定文件路径 writer2or32Port = new FileWriter("C:\\Users\

我正在java中运行一些powershell脚本,我已经完成了我的程序,但现在我不确定如何将其打包到可执行文件.jar中,同时仍然能够使用这些脚本。我已将脚本放在项目文件中(与src文件夹处于同一级别)

&

我知道
.class.getResourceAsStream(“ipScan.ps1”)
可能会起作用,但如何将其用作
运行扫描
字符串第二部分的字符串

我也不确定如何为FileWriter指定文件路径

    writer2or32Port = new FileWriter("C:\\Users\\--\\Documents\\serials\\2or32Port.csv");
    buffer2or32Port = new BufferedWriter(writer2or32Port);`
理想情况下,我可以对任何用户桌面使用%USERNAME%或%USERPROFILE%之类的东西

writer2or32Port = new FileWriter("%USERPROFILE%\\Desktop\\2or32Port.csv");
然而,我得到的文件找不到异常。 任何帮助都将不胜感激


谢谢

我遇到了一个类似的问题,我发现这很有用:

例如,您将脚本放入源代码中,并通过getResourceAsStream()加载脚本,然后将内容放在磁盘上的任何位置。然后,您可以从那里启动脚本

public static void main(String[] args) throws IOException {

    Files.copy(Test.class.getResourceAsStream("test.ps1"), Paths.get("/tmp/sometempfile.ps1"));
    // now you know the location and can do something like: cat /tmp/sometempfile.ps1

}

您将遇到的问题之一是“工作目录”的概念。这是启动程序的位置,可能不是程序所在的位置。在这种情况下,您可以做的不多,因为通常不可能找到安装位置。相反,您可以将脚本打包到Jar中,并在运行时将其提取到一个众所周知的位置(如临时或用户的主位置)@MadProgrammer为响应喝彩,我计划将脚本明确地保存在Jar文件中-尽管我以前从未这样做过,如果脚本打包在一起,我不知道如何从java内部调整代码以调用脚本(我只知道如何指定确切位置,我还没有弄清楚如何使用.getResourceAsStream)嘿,感谢堆的响应,所以我一直在四处搜索,找到了这个答案-所以我把我的脚本放在这个位置,并在字符串的末尾添加了“\\ipScan.ps1”,到目前为止似乎有效吗?我会把它打包并进行测试——如果需要,我会使用你的方法。谢谢你吹毛求疵,但我很想用instead@Joshfromnz不,作为一个一般概念,它不适用于您——假设您希望Jar文件中包含的脚本作为起点。您需要使用
getResourceAsStream
(或类似)并使用流将脚本复制到“外部”位置—记住,Jar只是一个zip文件file@MadProgrammer是的,我意识到:(当我回到办公室时,必须尝试
getResourceAsStream
——目前正如你所说,它不能像我所希望的那样工作,因为我需要将脚本放在jar之外才能工作。尽管如此,为帮助干杯!
writer2or32Port = new FileWriter("%USERPROFILE%\\Desktop\\2or32Port.csv");
public static void main(String[] args) throws IOException {

    Files.copy(Test.class.getResourceAsStream("test.ps1"), Paths.get("/tmp/sometempfile.ps1"));
    // now you know the location and can do something like: cat /tmp/sometempfile.ps1

}