Limit file size while writing in java

后端 未结 4 724
情话喂你
情话喂你 2021-01-06 06:10

I need to limit the file size to 1 GB while writing preferably using BufferedWriter.

Is it possible using BufferedWriter or I have to use

4条回答
  •  独厮守ぢ
    2021-01-06 06:36

    int maxSize = 1_000_000_000;
    Charset charset = StandardCharsets.UTF_F);
    
    int size = 0;
    int lineCount = 0;
    while (lineCount < lines.length) {
         long size2 = size + (lines[lineCount] + "\r\n").getBytes(charset).length;
         if (size2 > maxSize) {
             break;
         }
         size = size2;
         ++lineCount;
    }
    
    List linesToWrite = lines.substring(0, lineCount);
    Path path = Paths.get("D:/test.txt");
    Files.write(path, linesToWrite , charset);
    

    Or a bit faster while decoding only once:

    int lineCount = 0;
    try (FileChannel channel = new RandomAccessFile("D:/test.txt", "w").getChannel()) {
        ByteBuffer buf = channel.map(FileChannel.MapMode.WRITE, 0, maxSize);
        lineCount = lines.length;
        for (int i = 0; i < lines.length; i++) {
            bytes[] line = (lines.get(i) + "\r\n").getBytes(charset);
            if (line.length > buffer.remaining()) {
                lineCount = i;
                break;
            }
            buffer.put(line);
        }
    }
    

提交回复
热议问题