Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java代码,仅使用最小RAM从大型文件中提取文本部分_Java_File_Text_File Io - Fatal编程技术网

java代码,仅使用最小RAM从大型文件中提取文本部分

java代码,仅使用最小RAM从大型文件中提取文本部分,java,file,text,file-io,Java,File,Text,File Io,我有巨大的文本文件——每个文件都有10GB大 现在,我有两个字符串“StringNumber1”和“StringNumber2” “Stringnumber1”在每个文本文件中只出现一次,“StringNumber2”始终在“Stringnumber1”之后(尽管文本文件中可能出现一次以上的“StringNumber2”) 我想提取每个文件中出现的所有文本,从匹配“StringNumber1”开始,直到匹配“StringNumber1”之后出现的“StringNumber2”(这些匹配的“Str

我有巨大的文本文件——每个文件都有10GB大

现在,我有两个字符串
“StringNumber1”
“StringNumber2”

“Stringnumber1”在每个文本文件中只出现一次,
“StringNumber2”
始终在
“Stringnumber1”
之后(尽管文本文件中可能出现一次以上的
“StringNumber2”

我想提取每个文件中出现的所有文本,从匹配“StringNumber1”开始,直到匹配“StringNumber1”之后出现的
“StringNumber2”
(这些匹配的
“StringNumber1”
“StringNumber2”之间的内容)
可能是几个字节到很多GB)


如何使用最少的RAM提取此类内容?我想用Java做这个

要最大限度地减少RAM使用,请将数据复制到另一个文件中。看到第一个字符串时启动新文件,看到第二个字符串时停止。这意味着您的堆使用量很小(几MB)并且是恒定的(无论复制的数据量如何)

只是使用了一个
BufferedReader
还不够好吗?我从来没有读过大文件的问题。使用这种方法时,您是否会遇到某种错误

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Read {

    /**
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new FileReader("someFile"));
        try {
            String line = br.readLine();
            while (line != null) {
                if(line.contains("String 1")) {
                    // ...
                } else if (line.contains("String 2")) {
                    // ...
                }               
                line = br.readLine();
            }       
        } finally {
            br.close();
        }
    }
}

看起来像是正则表达式的工作-但您需要向它们提供一个流。仅仅使用
BufferedReader
还不够好吗?您尝试了什么,遇到了什么困难?你知道你有内存问题吗,或者你担心你可能有内存问题吗?我会把循环写为
for(String-line;(line=br.readline())!=null;)