我应该如何将文件加载到Java应用程序中?
我应该如何将文件加载到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()方法。这使应用程序更加可移植。可以将其移至不同的平台,机器或者目录,并且仍可以正常运行。
回答
getResource很好,但是只要我们可以控制工作目录的位置(通常可以),使用相对路径也可以使用。
此外,可以使用File.separator,File.separatorChar或者System.getProperty(" file.separator")来解决与分隔符有关的平台依赖性。
回答
即使在Windows上,我也没有使用Unix样式的路径分隔符的问题(尽管检查File.separatorChar是一个好习惯)。
使用ClassLoader.getResource()的技术最适合将从JAR文件加载的只读资源。有时,我们可以以编程方式确定应用程序目录,这对于可配置文件或者服务器应用程序很有用。 (当然,用户可编辑的文件应该存储在System.getProperty(" user.home")目录中的某个位置。)
回答
我们正在装载什么文件以用于配置或者数据(例如输入文件)或者作为资源?
- 如果作为资源,请遵循Will和Justin的建议和示例
- 如果是配置,则可以使用ResourceBundle或者Spring(如果配置更为复杂)。
- 如果我们需要读取文件以处理内部数据,则此代码段可以帮助BufferedReader file = new BufferedReader(new FileReader(filename)),然后使用file.readLine()读取文件的每一行; `不要忘记关闭文件。