有没有办法获取执行或编译的.java文件的文件路径?
在Python中,全局变量有没有办法获取执行或编译的.java文件的文件路径?,java,netbeans,path,Java,Netbeans,Path,在Python中,全局变量\uuuuu file\uuuu是当前文件的完整路径 System.getProperty(“user.dir”)似乎返回当前工作目录的路径 我想获取当前.java、.class或包文件的路径 然后使用它来获取图像的路径 我在Netbeans中的项目文件结构如下: (来源:) 更新以使用我选择的最佳答案中建议的代码: // read image data from picture in package try { InputStream
\uuuuu file\uuuu
是当前文件的完整路径
System.getProperty(“user.dir”)
似乎返回当前工作目录的路径
我想获取当前.java、.class或包文件的路径
然后使用它来获取图像的路径
我在Netbeans中的项目文件结构如下:(来源:)
更新以使用我选择的最佳答案中建议的代码:
// read image data from picture in package
try {
InputStream instream = TesseractTest.class
.getResourceAsStream("eurotext.tif");
bufferedImage = ImageIO.read(instream);
}
catch (IOException e) {
System.out.println(e.getMessage());
}
此代码用于中的用法示例
我的用法示例的完整代码是。public class Main{
公共静态void main(字符串[]args)引发异常{
System.out.println(getPackageParent(Main.class,false));
}
公共静态字符串getPackageParent(类cls,布尔值include\u last\u dot)
抛出异常{
StringBuilder sb=新的StringBuilder(cls.getPackage().getName());
如果(sb.lastIndexOf(“.”)大于0)
如果(包括最后一点)
返回sb.delete(sb.lastIndexOf(“.”+1,sb.length())
.toString();
其他的
返回sb.delete(sb.lastIndexOf(“.”,sb.length()).toString();
使某人返回字符串();
}
}
如果要加载存储在类文件旁边的图像文件,请使用
在您的情况下,这将是:
try (InputStream instream = TesseractTest.class.getResourceAsStream("eurotext.tif")) {
// read stream here
}
这假设构建系统将.tif文件复制到build
文件夹中,这通常由IDE完成,但需要在构建工具(如Ant和Gradle)中进行额外设置
如果将程序打包为.jar文件,代码仍然可以工作,再次假设构建系统将.tif文件打包为.class文件旁边的文件
有没有办法获取执行或编译的.java文件的文件路径
为了完整起见,你问题的字面答案是“不容易也不总是”
通过StackFrameElement.getFileName()
,可以找到调用堆栈上类的源文件名。但是,文件名并不总是可用1,也不一定是正确的2
实际上,执行代码的系统上很可能不存在源代码树。因此,如果您需要一个隐藏在源代码树中的图像文件,那么您就不走运了
1-这取决于您使用的Java编译器和编译选项。还有可能在其他事情上
2-例如,编译后可以移动或删除源树
Andreas描述了解决您问题的正确方法。确保图像文件位于应用程序的JAR文件中,并使用
getResource
或getResourceAsStream
访问它。如果应用程序使用的API在文件系统中需要文件名/路径名,则可能需要将资源从JAR提取到临时文件或类似文件。这将无助于访问存储在.JAR文件中.class文件旁边的.tif文件。
try (InputStream instream = TesseractTest.class.getResourceAsStream("eurotext.tif")) {
// read stream here
}