Java 以字符串形式存储文件

Java 以字符串形式存储文件,java,Java,我觉得将文件存储在字符串中是一种糟糕的做法。有没有其他方法可以做到这一点,因为我想比较一个键列表,并对文件进行indexOf(键)。密钥可以位于文件中的任何位置。只要字符串符合内存中的要求,就可以了 更好的选择可能是传递文件并将键存储在HashSet或HashMap中,例如将关键字映射到文件中的偏移量。您可以使用BufferedReader一次将数据块拉入: BufferedReader reader = new BufferedReader( new FileR

我觉得将文件存储在字符串中是一种糟糕的做法。有没有其他方法可以做到这一点,因为我想比较一个键列表,并对文件进行indexOf(键)。密钥可以位于文件中的任何位置。

只要字符串符合内存中的要求,就可以了


更好的选择可能是传递文件并将键存储在
HashSet
HashMap
中,例如将关键字映射到文件中的偏移量。

您可以使用BufferedReader一次将数据块拉入:

    BufferedReader reader = new BufferedReader(
            new FileReader(file));
    char[] buf = new char[1024];
    int numRead=0;
    while((numRead=reader.read(buf)) != -1){
        String readData = String.valueOf(buf, 0, numRead);


并测试每个小字符串。您需要跟踪索引,但这样会占用更少的内存。

如果您的文件很大,并且您只尝试执行indexOf操作,那么最好分阶段将文件加载到内存中。在BufferedReader上设置适当的缓冲区,然后读入缓冲区。执行indexOf操作。如果失败,请重复此操作,但将缓冲区读取的字符数的大小添加到indexOf函数的返回值中。

根据您以这种方式使用文件的原因,这可能是一种不好的做法。但是,一般来说,情况并非如此

如果您将该文件用作美化属性文件,那么可能应该重新格式化文件中的文本,并将其作为属性文件读入

如果可以将键和值存储在数据库中,那么这将是比搜索字符串更好的解决方案


但是,如果您有一个文本文件,您正在搜索它是否包含某些关键字,那么您已经在使用最简单的解决方案了。

为什么您认为这是一种不好的做法?对我来说似乎很合理。文件是否很大(或非常多)?字符串中的文件是指“从文件中提取的文本”,对吗?另一种方法是什么?搜索替代品的方法是什么?你考虑过SQL数据库吗?是的,文件可能非常大。我想知道是否有另一种方法将文件存储在内存中。现在,我只是读取文件并将其附加到StringBuilder,然后将其作为StrinBuilder.toString()返回,或者使用hashmap将键的散列(更短)映射到可能的偏移量。我只是键入了相同的内容。愚蠢的电话:)