在不对其路径进行硬编码的情况下读取大量文件

时间:2015-05-09 16:57:22

标签: 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”对于您试图在页面/文档中找到的每个单词,其中页面/文档是我试图上传的单词库。

我不得不休息一下,但我现在要尝试你的建议。这些都很棒,非常感谢!

3 个答案:

答案 0 :(得分:0)

您可以将文件放在应用的资源文件夹中,并按照以下方式使用它们:

ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("test.txt").getFile());

如果资源中存在完整的文件,可以使用getResources(“”);浏览应用中的所有资源,然后选择一个作为文本文件的资源。即将它们放在一个特殊的文件夹中,因此区分它们会更容易。

答案 1 :(得分:0)

关于内部资源(如果应用程序中的文本文件是作为应用程序的一部分提供的,则它们是内部资源),项目通常会决定目录结构的内容。通常,在项目中将有源代码所在的“src /”目录,在“src /”下,您可以为您的资源放置一个名为“res /”的文件夹。为避免资源名称冲突,您可以进一步指定包名称,如结构。因此,如果您的类具有包com.example。*,那么您可以在您的类中的res / com / example / Now中放置text.txt,负责读取您可以拥有的资源:

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;
        }
}

答案 2 :(得分:0)

有许多好的建议,但没有人提到环境变量或系统属性。您可以为您的操作系统定义一个环境变量,并按如下所示进行:

java -jar app.jar -DconfigPath="/home/..."

或者您可以在启动时将应用程序传递给系统变量:

String configPath = System.getProperty("configPath");

然后在代码中使用它:

viewholde