java - 读取大量文件而不对其路径进行硬编码

标签 java text filepath

这可能更像是“最佳实践”类型的问题,但我试图在当前的项目中使用两个文本文档,并且不确定继续阅读和/或存储它们的最佳方法。我目前将它们的路径硬编码到我的文件读取器中,这绝对不是我想要的(下面是当前的实现)。

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/

相关文章:

python - 使用 SQLAlchemy 转义文件路径中的特殊字符

java - Hadoop 如何拆分和组合其输出数据?

java - 使用 Groovy 1.8、Hibernate JPA 注释构建失败

php - 文本搜索以与 Mysql 数据库表进行比较

c - 程序无法从文本文件中正确读取

C# SoundPlayer 类未在指定路径找到文件

java - Java 中的 LocalDate 数据类型

java - Tomcat 和 JDBC 连接池

javascript - 使用 jquery 将文本包裹到 <b> 中并由 <br> 分隔

c++ - 将文本作为字符串发送与引号之间的文本之间的区别