java - 使用java FileChannel复制文件并附加文件末尾,但终端卡住

标签 java nio

这是我的代码:

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

public class TestNIO {
    public static void main(String[] args) throws IOException {
        // in the file "hello world"
        File file = new File("test.txt");
        RandomAccessFile raf = new RandomAccessFile(file, "rws");
        FileChannel fc = raf.getChannel();
        ByteBuffer buffer = fc.map(FileChannel.MapMode.READ_ONLY, 0, file.length());
        fc.position(file.length());
        fc.write(buffer);
        fc.close();
        raf.close();
    }
}

我在 mac(jdk 8) 上的终端中执行了它。一旦执行“java TestNIO”,它就会卡住。

它在Windows上运行并且没问题。

任何帮助将不胜感激。

最佳答案

最终解决方案:

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.channels.FileChannel;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;

public class TestNIO3 {
    public static void main(String[] args) throws IOException {
        // in the file "hello world"
        File file = new File("test.txt");
        RandomAccessFile raf = new RandomAccessFile(file, "rw");

        FileChannel fc = raf.getChannel();
        ByteBuffer buffer = fc.map(FileChannel.MapMode.READ_ONLY, 0, file.length());
        fc.position(file.length());
        Charset charset = Charset.defaultCharset();
        CharsetDecoder decoder = charset.newDecoder();
        CharBuffer cb = decoder.decode(buffer);
        CharsetEncoder encoder = charset.newEncoder();
        ByteBuffer to = encoder.encode(cb);
        fc.write(to);

        to.flip();
        to.clear();
        fc.close();
        raf.close();
    }
}

关于java - 使用java FileChannel复制文件并附加文件末尾,但终端卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52051586/

相关文章:

java - 如何将文件复制到 Java 7 中的目录

java - 使用 Bytebuffers 和 NIO 时如何避免 OutOfMemoryError?

用于替换除下划线以外的所有特殊字符的 Java 正则表达式

java - 有没有办法在运行时检查post请求参数大小

java - 线程闲置 = 坏?

java - 将 URL 转换为路径而不抛出异常

java - 当我的java进程重命名源文件时,任何进程都可以读取目标文件吗

Java,首先从 O(n) 时间复杂度的数组中复制值

java - 如何在 Window Builder 中生成不同数量的文本框和标签

java - Maven 会自动构建其他模块吗?