简体   繁体   English

Java:一次按“ n”条记录读取大文件

[英]Java: Read large file by 'n' records at a time

I have an input text file having 5k records. 我有一个5k记录的输入文本文件。 I want to read in 1k records, pass as parameter to SQL query IN clause (which is limited to 1k values) and then get the next 1k records from text file and repeat. 我想读入1k条记录,将其作为参数传递给SQL查询IN子句(限于1k个值),然后从文本文件中获取下一个1k条记录并重复。 How can I do this in java. 如何在Java中执行此操作。 Below is sample code i have so far: 下面是我到目前为止的示例代码:

FileInputStream fis = null;
    BufferedReader reader = null;

    try {
        fis = new FileInputStream("values.txt");
        reader = new BufferedReader(new InputStreamReader(fis))
        int i,counter=0;
        do{
        String line;
        ArrayList values = new ArrayList();
        for(i=0;i<1000;i++){
            line = reader.readLine();
            values.append(line);
            if(line ==null)
                break;
        }
        counter = i;
        String sql = ....;
        //db connection
        }while(counter<6000);
        conn.close;
     }

You can improve your reading speed using buffers to be able to read a big chunk in every single file access. 您可以使用缓冲区提高读取速度,以便能够在每个文件访问中读取很大的块。 So specify the buffer size of your BufferedReader like : 因此,请指定BufferedReader的缓冲区大小,例如:

BufferedReader br = new BufferedReader(new FileReader("values.txt"), 1000);

or use a buffer of your own to read whole file to memory like: 或使用您自己的缓冲区将整个文件读取到内存中,例如:

char[] buffer = new char[1000];
Reader r = new FileReader("values.txt");
int read;
do {
    read = r.read(buffer);
    // store buffer in a StringBuilder
} while (read > 0);
//read StringBuider using a buffered reader

It depends on your requirements and how big is the file 这取决于您的要求以及文件的大小

You can create a BufferedReader of any size for example the bottom style creates a 1 KB buffered reader. 您可以创建任何大小的BufferedReader,例如,底部样式将创建1 KB的缓冲阅读器。 Probably you should look around how many lines of your file makes 1 KB or more and configure it accordingly. 大概您应该查看文件中有多少行达到1 KB或更多,并进行相应配置。

BufferedReader br;
br = new BufferedReader(new InputStreamReader(new FileInputStream("values.txt"), "UTF-16"), 1*1024);

You can read the documentation of BufferedReader 您可以阅读BufferedReader的文档

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM