这可能更像是“最佳实践”类型的问题,但我试图在当前的项目中使用两个文本文档,并且不确定继续阅读和/或存储它们的最佳方法。我目前将它们的路径硬编码到我的文件读取器中,这绝对不是我想要的(下面是当前的实现)。
try (BufferedReader reader = new BufferedReader(new FileReader("C:\\e\\t\\c\\.\\text.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
string1 = string1 + " " + line;
}
}
这可行,但我必须更改使用它的每台计算机的文件位置。
我尝试过的:
- 对文件路径进行硬编码(有效,但一点也不灵活)
- 通过我的项目创建本地文件路径(我遇到了一些困难,无法解决这个问题)
- 将几千个单词的文本文件直接复制/粘贴到我的程序中的字符串中(看起来真的很难看,但我不确定这是否应该/不应该这样做)
总的来说,我对 Java 和编程还很陌生,所以如果您需要更多信息,或者是否有其他我应该提出的内容(或者如果我在搜索中错过了类似的问题),请告诉我。谢谢大家!
编辑:
关于我的程序的功能:我正在做的是获取用户输入的字符串,然后对照我尝试上传的文本文档进行检查,以查看有多少匹配项(类似于使用“ctrl+f”)对于您尝试在页面/文档中查找的每个单词,其中页面/文档是我尝试上传的单词库)。
我不得不短暂休息,但我现在要尝试你的建议。这些看起来都很棒,非常感谢!
最佳答案
关于内部资源(应用程序中的文本文件如果作为应用程序的一部分提供,则属于内部资源),项目通常决定目录结构。通常,在项目中会有一个“src/”目录,其中包含源代码,在“src/”下您可以放置一个名为“res/”的文件夹来存放资源。为了避免资源名称冲突,您可以进一步指定包名称(如结构)。因此,如果您的类有包 com.example.*,那么您可以将 text.txt 放在 res/com/example/现在,在您的类中负责读取您可以拥有的资源:
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;
}
}
关于java - 读取大量文件而不对其路径进行硬编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30142661/