用Java编写时限制文件大小
最好使用写入时,我需要将文件大小限制为1 GB BufferedWriter
。
是否可以使用BufferedWriter
或必须使用其他库?
喜欢
try (BufferedWriter writer = Files.newBufferedWriter(path)) { //...
writer.write(lines.stream());
}
回答:
您总是可以自己写,OutputStream
以限制写的 字节 数。
下面假定如果超出大小,则要引发异常。
public final class LimitedOutputStream extends FilterOutputStream { private final long maxBytes;
private long bytesWritten;
public LimitedOutputStream(OutputStream out, long maxBytes) {
super(out);
this.maxBytes = maxBytes;
}
@Override
public void write(int b) throws IOException {
ensureCapacity(1);
super.write(b);
}
@Override
public void write(byte[] b) throws IOException {
ensureCapacity(b.length);
super.write(b);
}
@Override
public void write(byte[] b, int off, int len) throws IOException {
ensureCapacity(len);
super.write(b, off, len);
}
private void ensureCapacity(int len) throws IOException {
long newBytesWritten = this.bytesWritten + len;
if (newBytesWritten > this.maxBytes)
throw new IOException("File size exceeded: " + newBytesWritten + " > " + this.maxBytes);
this.bytesWritten = newBytesWritten;
}
}
当然,您现在必须手动设置Writer
/ OutputStream
链。
final long SIZE_1GB = 1073741824L;try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(
new LimitedOutputStream(Files.newOutputStream(path), SIZE_1GB),
StandardCharsets.UTF_8))) {
//
}
以上是 用Java编写时限制文件大小 的全部内容, 来源链接: utcz.com/qa/415994.html