有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何分割大尺寸。将txt文件数据分成小部分并插入数据库?

下面是我读取和拆分文本文件内容的代码

  try {

        br = new BufferedReader(new FileReader("F:\\Test.txt"));
        final char[] cbuf = new char[2048];
        final int length = br.read(cbuf);

        cbuf[length] = '@';
        String packet = new String(cbuf, 0, length + 1);
        final String[] splitedPacket=packet.split("@");
        for(int i=0;i<splitedPacket.length;i++)
        {
            if(splitedPacket[i].contains("POS"))
            {
                System.out.println(splitedPacket[i]+"@");
                preparedstatement=connection.prepareStatement("insert into inserttextfile([file]) values(?)");
                preparedstatement.setString(1, splitedPacket[i]+"@");
                preparedstatement.executeUpdate();
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (br != null)br.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

它在我的小尺寸中工作得很好。txt文件,但如果我使用超过30 MB的文本文件,我会得到数组索引超出绑定的异常

那么如何拆分和读取这种类型的。txt文件并插入数据库? (尤其需要拆分大文件(例如从30MB拆分为5MB)并插入数据库) 请在这个问题上指导我


共 (2) 个答案

  1. # 1 楼答案

     try (Scanner read = new Scanner(new File("/tmp/datafile.txt"));) {
            read.useDelimiter("@");
            while (read.hasNext()) {
                String splitedPacket = read.next();
                System.out.println(splitedPacket);
                // Perform DB Operation
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    
    1. 不要读整个文件
    2. 在任何给定时间内,使用扫描仪读取并保持一次读取-以避免OOM
    3. 如有可能,以批量方式执行Db操作。 如果您在一个事务中运行,请读取1000条记录并作为单独的批量插入进行处理
  2. # 2 楼答案

    通过不使用readLine,您可以很难做到这一点

        try {
            FileInputStream fis = new FileInputStream("F:\\Test.txt");
            reader = new BufferedReader(new InputStreamReader(fis));          
            String line = reader.readLine();
            while(line != null){
    
                //process your line here, it's just a String...   
    
                line = reader.readLine();
            }           
    
        } catch (FileNotFoundException ex) {
            ...
        } catch (IOException ex) {