【发布时间】:2019-02-16 06:44:26
【问题描述】:
我正在编写一个程序部分,只是为了将文件从源文件复制到目标文件。该代码应该可以正常工作,但是如果有一个文件大文件,则在目标文件达到 4.3 GB 大小后,复制过程将结束,但有一个例外。例外是“文件太大”,它看起来像:
java.io.IOException: Die Datei ist zu groß
at sun.nio.ch.FileDispatcherImpl.write0(Native Method)
at sun.nio.ch.FileDispatcherImpl.write(FileDispatcherImpl.java:60)
at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93)
at sun.nio.ch.IOUtil.write(IOUtil.java:65)
at sun.nio.ch.FileChannelImpl.write(FileChannelImpl.java:211)
at java.nio.channels.Channels.writeFullyImpl(Channels.java:78)
at java.nio.channels.Channels.writeFully(Channels.java:101)
at java.nio.channels.Channels.access$000(Channels.java:61)
at java.nio.channels.Channels$1.write(Channels.java:174)
at java.nio.file.Files.copy(Files.java:2909)
at java.nio.file.Files.copy(Files.java:3069)
at sample.Controller.copyStream(Controller.java:318)
制作方法如下:
private void copyStream(File src, File dest){
try {
FileInputStream fis = new FileInputStream(src);
OutputStream newFos = java.nio.file.Files.newOutputStream(dest.toPath(),StandardOpenOption.WRITE);
Files.copy(src.toPath(),newFos);
newFos.flush();
newFos.close();
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
我也尝试使用 java.io Fileoutputstream 并以千字节的方式写入,但发生了相同的情况。如何复制或创建大于 4.3 GB 的文件?是否可以使用除 java 之外的其他语言?这个程序我在 Linux (Ubuntu LTS 16.04) 上运行。
提前致谢。
编辑:
非常感谢大家的帮助。正如您所说,文件系统是问题所在。在我将文件系统格式化为 exfat 后,它工作正常。
【问题讨论】:
-
你在写什么样的文件系统? FAT32 aka VFAT 不支持超过 4.3GB 的文件,无论您使用什么工具或语言。
-
好的,那么这可能是外部硬盘使用 VFAT 的问题。有没有更好的文件系统推荐?
-
如果您不需要与 Windows 共享,则 ext4 是标准选择。如果您确实需要与 Windows 共享它,可能是 exFAT 或 NTFS。
-
这是来自操作系统的错误,您需要另一个文件系统。
标签: java linux ubuntu-16.04 java-io