используя java FileChannel скопируйте файл и добавьте конец файла, но терминал застрял - PullRequest
0 голосов
/ 28 августа 2018

Это мой код:

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", и он застревает.

Он работает в Window и работает нормально.

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 28 августа 2018

окончательное решение:

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();
    }
}
...