所以我尝试使用 BufferedImages,因为它们更适合,而且加载它们似乎有点挑剔。我认为你需要绝对路径来加载它们,我已经尝试只执行 src/Package.image.png 但是当我导出到可运行的 jar 时它不起作用。这段代码在 eclipse 中工作,但由于某种原因,当我将其导出为 .jar 时,它不起作用。
package MainGame;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
public class GraphicsPath {
public static String getGraphicsPath(){
String path = null;
PrintWriter writer = null;
try {
writer = new PrintWriter("text.txt");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
path = GraphicsPath.class.getProtectionDomain().getCodeSource().getLocation().getPath();
System.out.println(path);
writer.println("orignal path " + path);
//FOR LINUX
String[] splited = path.split("/");
//FOR WINDOWS
//String[] splited = path.split("\");
writer.println(path);
path = path.replace("%20", " ");
path += "MainGame/";
writer.println(path);
writer.close();
System.out.println(path);
return path;
}
}
这是导出到 jar 时 text.txt 的内容
orignal path ./
./
./MainGame/
这是仍在 java 项目中的 text.txt 的内容
orignal path /home/mini/workspace/Pokemon%20Game/bin/
/home/mini/workspace/Pokemon%20Game/bin/
/home/mini/workspace/Pokemon Game/bin/MainGame/
最佳答案
有点太简单了,如果你把图像资源放在与GraphicsPath
相同的目录中(都在类路径上),你可以这样做
BufferedImage image;
try (InputStream in = GraphicsPath.class.getResourceAsStream('my-image.png')) {
if (in != null) {
image = ImageIO.read(in );
}
}
这就是您想要做的。如果您使用 EAR、WAR、JNLP、java -jar
,或者抱歉,小程序,则使用路径可能无法工作。将资源与您知道存在的类捆绑在一起意味着您可以轻松访问这些资源。
现在,就您而言,它很笨重,因为它们不会被复制到您的 bin 目录中,因此您可能需要编辑用于开发的类路径。
关于java - 获取文件的绝对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30880014/