无需硬编码路径即可读取大量文件
Reading a large number of files without hardcoding their path
这可能更像是一个 "best practices" 类问题,但我正在尝试在我当前的项目中使用两个文本文档,并且不确定继续阅读 and/or 存储的最佳方法他们。我目前将它们的路径硬编码到我的文件阅读器中,这绝对不是我想要的(下面是当前实现)。
try (BufferedReader reader = new BufferedReader(new FileReader("C:\e\t\c\.\text.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
string1 = string1 + " " + line;
}
}
这可行,但我必须更改每台使用它的计算机的文件位置。
我尝试过的:
- 硬编码文件路径(有效,一点也不灵活)
- 通过我的项目创建一个本地文件路径(我 运行 遇到了一些困难,无法解决这个问题)
- Copy/paste 在我的程序中将几千个单词的文本文件直接转换成字符串(看起来真的很难看,但我不确定是否应该/不应该这样做)
我对 Java 和一般的编程还是很陌生,所以如果您需要更多信息或者是否有任何其他我应该提出的问题(或者如果我有类似的问题,请告诉我在我的搜索中遗漏了)。谢谢大家!
编辑:
关于我的程序的功能:我正在做的是获取用户键入的字符串,然后根据我尝试上传的文本文档检查该字符串以查看有多少匹配项(类似于使用 "ctrl+f" 对于您试图在 page/document 中查找的每个单词,其中 page/document 是我尝试上传的单词库)。
我不得不休息一下,但我现在要尝试你的建议。这些看起来都很棒,非常感谢!
你可以把这些文件放在你的应用程序的资源文件夹中,并像这样使用它们:
ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("test.txt").getFile());
如果资源中有一大堆文件,您可以使用 getResources("");浏览您应用程序中的所有资源,select 一个是您的文本文件。即把它们放在一个特殊的文件夹中,这样区分它们会更容易。
关于内部资源(应用程序中的文本文件如果作为应用程序的一部分提供,则属于内部资源),项目通常会决定目录结构。通常,在一个项目中会有 "src/" 目录,其中包含源代码,在 "src/" 下,您可以放置一个名为 "res/" 的文件夹来存放您的资源。为避免资源名称冲突,您可以进一步指定包名称,如结构。所以如果你的 class 有包 com.example.*,那么你可以将 text.txt 放在 res/com/example/ 现在在你的 class 中负责读取资源,你可以有:
try (InputStream in = getClass().getResourceAsStream("/res/com/example/text.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(in))) {
String line;
while ((line = reader.readLine()) != null) {
string1 = string1 + " " + line;
}
}
但是,如果文本文件必须由用户系统提供,那么它们就是外部资源,在这种情况下,必须在运行时提供它们的路径。通常,作为程序本身的参数。所以在你的 main()
方法中捕获文件的路径如下:
String fileName = args[0]; // assuming the user has provided arguments
try (InputStream in = Files.newInputStream(Paths.get(fileName));
BufferedReader reader = new BufferedReader(new InputStreamReader(in))) {
String line;
while ((line = reader.readLine()) != null) {
string1 = string1 + " " + line;
}
}
有很多好的建议,但没有人提到环境变量或系统属性。您可以为您的 OS 定义一个环境变量并像这样获取它:
String configPath = System.getenv("CONFIG_PATH");
或者您可以在启动时向应用程序传递一个系统变量:
java -jar app.jar -DconfigPath="/home/..."
然后在代码中使用:
String configPath = System.getProperty("configPath");
这可能更像是一个 "best practices" 类问题,但我正在尝试在我当前的项目中使用两个文本文档,并且不确定继续阅读 and/or 存储的最佳方法他们。我目前将它们的路径硬编码到我的文件阅读器中,这绝对不是我想要的(下面是当前实现)。
try (BufferedReader reader = new BufferedReader(new FileReader("C:\e\t\c\.\text.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
string1 = string1 + " " + line;
}
}
这可行,但我必须更改每台使用它的计算机的文件位置。
我尝试过的:
- 硬编码文件路径(有效,一点也不灵活)
- 通过我的项目创建一个本地文件路径(我 运行 遇到了一些困难,无法解决这个问题)
- Copy/paste 在我的程序中将几千个单词的文本文件直接转换成字符串(看起来真的很难看,但我不确定是否应该/不应该这样做)
我对 Java 和一般的编程还是很陌生,所以如果您需要更多信息或者是否有任何其他我应该提出的问题(或者如果我有类似的问题,请告诉我在我的搜索中遗漏了)。谢谢大家!
编辑:
关于我的程序的功能:我正在做的是获取用户键入的字符串,然后根据我尝试上传的文本文档检查该字符串以查看有多少匹配项(类似于使用 "ctrl+f" 对于您试图在 page/document 中查找的每个单词,其中 page/document 是我尝试上传的单词库)。
我不得不休息一下,但我现在要尝试你的建议。这些看起来都很棒,非常感谢!
你可以把这些文件放在你的应用程序的资源文件夹中,并像这样使用它们:
ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("test.txt").getFile());
如果资源中有一大堆文件,您可以使用 getResources("");浏览您应用程序中的所有资源,select 一个是您的文本文件。即把它们放在一个特殊的文件夹中,这样区分它们会更容易。
关于内部资源(应用程序中的文本文件如果作为应用程序的一部分提供,则属于内部资源),项目通常会决定目录结构。通常,在一个项目中会有 "src/" 目录,其中包含源代码,在 "src/" 下,您可以放置一个名为 "res/" 的文件夹来存放您的资源。为避免资源名称冲突,您可以进一步指定包名称,如结构。所以如果你的 class 有包 com.example.*,那么你可以将 text.txt 放在 res/com/example/ 现在在你的 class 中负责读取资源,你可以有:
try (InputStream in = getClass().getResourceAsStream("/res/com/example/text.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(in))) {
String line;
while ((line = reader.readLine()) != null) {
string1 = string1 + " " + line;
}
}
但是,如果文本文件必须由用户系统提供,那么它们就是外部资源,在这种情况下,必须在运行时提供它们的路径。通常,作为程序本身的参数。所以在你的 main()
方法中捕获文件的路径如下:
String fileName = args[0]; // assuming the user has provided arguments
try (InputStream in = Files.newInputStream(Paths.get(fileName));
BufferedReader reader = new BufferedReader(new InputStreamReader(in))) {
String line;
while ((line = reader.readLine()) != null) {
string1 = string1 + " " + line;
}
}
有很多好的建议,但没有人提到环境变量或系统属性。您可以为您的 OS 定义一个环境变量并像这样获取它:
String configPath = System.getenv("CONFIG_PATH");
或者您可以在启动时向应用程序传递一个系统变量:
java -jar app.jar -DconfigPath="/home/..."
然后在代码中使用:
String configPath = System.getProperty("configPath");