在Python中,全局变量__file__
是当前文件的完整路径。
System.getProperty("user.dir");
似乎返回当前工作目录的路径。
我想获取当前.java,.class或包文件的路径。
然后使用它来获取图像的路径。
我在Netbeans中的项目文件结构如下所示:files http://pix.toile-libre.org/upload/original/1475433676.png
更新以使用我选择的最佳答案建议的代码:
// 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());
}
此代码用于tess4j的使用示例。
我的使用示例的完整代码是here。
答案 0 :(得分:1)
如果要加载存储在类文件旁边的图像文件,请使用Class::getResourceAsStream(String name)
。
在你的情况下,那将是:
try (InputStream instream = TesseractTest.class.getResourceAsStream("eurotext.tif")) {
// read stream here
}
这假设您的构建系统将.tif文件复制到build
文件夹,这通常由IDE完成,但需要在Ant和Gradle等构建工具中进行额外设置。
如果将程序打包到.jar文件,代码仍然有效,再次假设您的构建系统将.tif文件打包到.class文件旁边。
答案 1 :(得分:0)
有没有一种方法可以获取执行或编译的.java文件的文件路径?
为完整起见,对您的问题的字面上答案是“不容易也不总是”。
有一种通过StackFrameElement.getFileName()
在调用堆栈中查找类的源文件名的方法。但是,文件名并不总是可用的 1 ,不一定是正确的 2 。
的确,在您执行代码的系统上很可能没有源树。因此,如果您需要一个保存在源代码树中的图像文件,那将会很不幸。
1-它取决于您使用的Java编译器和编译选项。可能还有其他事情。
2-例如,可以在编译后移动或删除源树。
安德烈亚斯(Andreas)描述了解决问题的正确方法。确保该图像文件位于应用程序的JAR文件中,然后使用getResource
或getResourceAsStream
对其进行访问。如果您的应用程序使用的API需要在文件系统中使用文件名/路径名,则可能需要将JAR中的资源提取到临时文件或类似的文件中。
答案 2 :(得分:-1)
public class Main {
public static void main(String[] args) throws Exception {
System.out.println(getPackageParent(Main.class, false));
}
public static String getPackageParent(Class<?> cls, boolean include_last_dot)
throws Exception {
StringBuilder sb = new StringBuilder(cls.getPackage().getName());
if (sb.lastIndexOf(".") > 0)
if (include_last_dot)
return sb.delete(sb.lastIndexOf(".") + 1, sb.length())
.toString();
else
return sb.delete(sb.lastIndexOf("."), sb.length()).toString();
return sb.toString();
}
}