Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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
有没有办法获取执行或编译的.java文件的文件路径?_Java_Netbeans_Path - Fatal编程技术网

有没有办法获取执行或编译的.java文件的文件路径?

有没有办法获取执行或编译的.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

在Python中,全局变量
\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
}