如何将文件加载到 Java 应用程序中?
简短的回答
使用以下两种方法之一:
Class.getResource(String)
Class.getResourceAsStream(String)
例如:
InputStream inputStream = YourClass.class.getResourceAsStream("image.jpg");
--
长话短说
通常,不希望使用绝对路径加载文件。例如,如果可以的话,不要这样做:
File file = new File("C:\\Users\\Joe\\image.jpg");
至少有两个原因不推荐使用此技术。首先,它在特定操作系统上创建一个依赖项,从而阻止应用程序轻松地移动到另一个操作系统。Java 的一个主要优点是能够在许多不同的平台上运行相同的字节码。使用这样的绝对路径会使代码的可移植性大大降低。
其次,根据文件的相对位置,这种技术可能会创建一个外部依赖项并限制应用程序的移动性。如果该文件存在于应用程序的工作目录之外,这将创建一个外部依赖项,并且为了将应用程序移动到另一台机器(容易出错) ,人们必须意识到这个依赖项。
相反,在 Class类中使用 getResource()方法。这使得应用程序更具可移植性。它可以移动到不同的平台、计算机或目录,但仍然可以正常工作。
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)