尝试使用Java中的RandomAccessFile复制文件

时间:2016-05-04 16:57:54

标签: java

我正在尝试使用Java中的RandomAccessFile复制一个简单的.txt数据。我编写了以下程序:

我的主要方法:

public static void main(String args[]){
    File original = new File("C:\\Users\\Tjatte\\Documents\\testdatei.txt");
    File copy = new File("C:\\Users\\Tjatte\\Documents\\testdateicopy.txt");
    copy(original,copy);
}

我的静态复制方法

public static void copy(File main,File copy){
    try{
        RandomAccessFile data = new RandomAccessFile(main,"rw");
        RandomAccessFile datacopy = new RandomAccessFile(copy,"rw");

        datacopy.seek(0);
        for(int i = 0; i < main.length(); i++){
            datacopy.write(data.read());
            data.skipBytes(i);
        }
    }catch(IOException e){
    }
}

每当我想复制一个文本中带有“hello”的文件时,复制文件中的输出就是“halÿÿ”......但它必须是“你好”。

我感谢任何帮助!提前谢谢。

3 个答案:

答案 0 :(得分:1)

我希望Files.copy(Path, OutputStream)try-with-resources close之类的

public static void copy(File main, File copy) {
    try (OutputStream fos = new FileOutputStream(copy)) {
        Files.copy(main.toPath(), fos);
    } catch (IOException ioe) {
        ioe.printStackTrace();
    }
}

,正如评论中@Andreas所指出的那样,使用Files.copy(Path, Path, CopyOption...)之类的

try {
    Files.copy(main.toPath(), copy.toPath());
} catch (IOException e) {
    e.printStackTrace();
}

答案 1 :(得分:0)

不要跳过字节。似乎“读”操作会将指针自动移动到下一个字符。

所以,只需删除“data.skipBytes(i);”

的行

答案 2 :(得分:0)

你也可以这样:

public class CopyFileContent{

    static final String FILEPATH = "C:../../inputfile.txt";

    public static void main(String[] args) {

        try {

            System.out.println(new String(readFromFile(FILEPATH, 150, 23)));

            writeToFile(FILEPATH, "Hello", 22);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    private static byte[] readFromFile(String filePath, int position, int size)
            throws IOException {

        RandomAccessFile file = new RandomAccessFile(filePath, "r");
        file.seek(position);
        byte[] bytes = new byte[size];
        file.read(bytes);
        file.close();
        return bytes;

    }

    private static void writeToFile(String filePath, String data, int position)
            throws IOException {

        RandomAccessFile file = new RandomAccessFile(filePath, "rw");
        file.seek(position);
        file.write(data.getBytes());
        file.close();

    }
}