如何将文件加载到 Java 应用程序中?

如何将文件加载到 Java 应用程序中?

168685 次浏览

简短的回答

使用以下两种方法之一:

例如:

InputStream inputStream = YourClass.class.getResourceAsStream("image.jpg");

--

长话短说

通常,不希望使用绝对路径加载文件。例如,如果可以的话,不要这样做:

File file = new File("C:\\Users\\Joe\\image.jpg");

至少有两个原因不推荐使用此技术。首先,它在特定操作系统上创建一个依赖项,从而阻止应用程序轻松地移动到另一个操作系统。Java 的一个主要优点是能够在许多不同的平台上运行相同的字节码。使用这样的绝对路径会使代码的可移植性大大降低。

其次,根据文件的相对位置,这种技术可能会创建一个外部依赖项并限制应用程序的移动性。如果该文件存在于应用程序的工作目录之外,这将创建一个外部依赖项,并且为了将应用程序移动到另一台机器(容易出错) ,人们必须意识到这个依赖项。

相反,在 Class类中使用 getResource()方法。这使得应用程序更具可移植性。它可以移动到不同的平台、计算机或目录,但仍然可以正常工作。

GetResource 很好,但是使用相对路径也同样有效,只要你能控制你的工作目录在哪里(你通常可以)。

此外,还可以使用 文件,分隔符文件,分隔符GetProperty (“文件分隔符”)来解决平台对分隔符字符的依赖性问题。

我在使用 Unix 风格的路径分隔符时没有遇到任何问题,即使在 Windows 上也是如此(尽管检查 文件,分隔符是一种很好的做法)。

使用 GetResource ()的技术最适合从 JAR 文件加载的只读资源。有时是 可以通过编程方式确定应用程序目录,它对于管理员可配置的文件或服务器应用程序很有用。(当然,用户可编辑的文件应该存储在 GetProperty (“ user.home”)目录的某个地方。)

您加载的文件是用于-配置或数据(如输入文件)还是作为资源?

  • 如果作为资源,请遵循 威尔和贾斯汀给出的建议和示例
  • 如果是配置,那么可以使用 资源包春天(如果配置更复杂)。
  • 如果您需要读取一个文件以处理内部的数据,这个代码片段可以帮助 BufferedReader file = new BufferedReader(new FileReader(filename)),然后使用 file.readLine();读取文件的每一行,不要忘记关闭该文件。
public byte[] loadBinaryFile (String name) {
try {


DataInputStream dis = new DataInputStream(new FileInputStream(name));
byte[] theBytes = new byte[dis.available()];
dis.read(theBytes, 0, dis.available());
dis.close();
return theBytes;
} catch (IOException ex) {
}
return null;
} // ()
public static String loadTextFile(File f) {
try {
BufferedReader r = new BufferedReader(new FileReader(f));
StringWriter w = new StringWriter();


try {
String line = reader.readLine();
while (null != line) {
w.append(line).append("\n");
line = r.readLine();
}


return w.toString();
} finally {
r.close();
w.close();
}
} catch (Exception ex) {
ex.printStackTrace();


return "";
}
}

使用 docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/classloader.html#getresource (java.lang. String)