当前位置: 首页 > 知识库问答 >
问题:

用java编写时限制文件大小

琴俊人
2023-03-14

在编写文件时,我需要将文件大小限制在1 GB以内,最好使用BufferedWriter

是否可以使用BufferedWriter或者我必须使用其他库?

try (BufferedWriter writer = Files.newBufferedWriter(path)) {   
    //...
    writer.write(lines.stream());
} 

共有1个答案

禄豪
2023-03-14

您始终可以编写自己的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))) {
    //
}
 类似资料:
  • 问题内容: 最好使用写入时,我需要将文件大小限制为1 GB 。 是否可以使用或必须使用其他库? 喜欢 问题答案: 您总是可以自己写,以限制写的 字节 数。 下面假定如果超出大小,则要引发异常。 当然,您现在必须手动设置/ 链。

  • 提前感谢你的帮助

  • 问题内容: 我目前正在实现使用jersey rest上传文件的功能。我想设置一个允许的最大文件大小,这对我来说似乎是很常见的要求。 我的第一种方法是使用Jerseys FormDataContentDisposition,它应该包含我可能需要的有关文件的所有信息。但是似乎缺少所有信息,除了文件名,包括文件大小。 这是我的休息方法: 由于返回的大小始终为“ -1”,因此不起作用! 我使用一个非常简单

  • 问题内容: 我正在使用可写流使用node.js编写一个大文件: 我想知道这种方案在不使用事件的情况下是否安全?如果不是(我认为是这种情况),那么将任意大数据写入文件的模式是什么? 问题答案: 这就是我最终做到的方式。背后的想法是创建实现ReadStream接口的可读流,然后使用方法将数据通过管道传输到可写流。 可以从猫鼬QueryStream中获取类的示例。

  • 问题内容: 我正在使用JVM标志运行Java进程,并看到以下输出: 有没有办法解决这个问题? 问题答案: 当无法满足Java堆的分配或永久生成时,命令行选项告诉HotSpot VM生成堆转储。使用此选项运行不会产生任何开销,因此对于OutOfMemoryError需要很长时间才能浮出水面的生产系统很有用。 为了解决您面临的特定问题,可以使用以下纠正措施之一: 措施1: XX:HeapDumpSeg

  • 问题内容: 我正在用multer创建一个简单的文件上传系统: 一切正常,文件被上传。唯一不起作用的是最大大小的限制。我这样做是为了检查文件onfileupload start的大小,如果文件过大,它将返回false。但是文件仍然只是上传。 似乎根本没有做任何事情。我尝试了一些东西,但是什么也没有。 我究竟做错了什么?使用multer上载时如何限制文件大小? 问题答案: 新的API 没有。如果要限制