Как скопировать содержимое файла в другой файл, но в начало файла в Java

Я хотел бы скопировать содержимое файла «Convert.sql» в файл «Entity.sql», не переопределяя файл «Entity.sql». Эту часть я смог сделать, но в дополнение к этому мне бы хотелось, чтобы содержимое файла «Convert.sql» копировалось вверху файла «Entity.sql», а также не в той же строке.

Пример: Convert.sql

Ученик

Работник

Пример: Entity.sql

Имя

Адрес

Пример: результат

Ученик

Работник

Имя

Адрес

Вот мой код для копирования содержимого файла в другой файл без переопределения файла, но он копируется в ту же строку, чего я не хочу.

package Final;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;

public class Mainy {
    public static void main(String[] args) throws IOException {
        File dir = new File(".");

        String source = dir.getCanonicalPath() + File.separator + "Convert.sql";
        String dest = dir.getCanonicalPath() + File.separator + "Entity.sql";

        File fin = new File(source);
        FileInputStream fis = new FileInputStream(fin);
        BufferedReader in = new BufferedReader(new InputStreamReader(fis));

        FileWriter fstream = new FileWriter(dest, true);
        BufferedWriter out = new BufferedWriter(fstream);

        String aLine = null;
        while ((aLine = in.readLine()) != null) {
            //Process each line and add output to Dest.txt file
            out.write(aLine);
            out.newLine();
        }

        // do not forget to close the buffer reader
        in.close();

        // close buffer writer
        out.close();
    }
}

Может ли кто-нибудь помочь мне сделать это?


person Lana    schedule 24.02.2015    source источник
comment
Прочитать содержимое первого файла, прочитать содержимое второго файла, записать содержимое первого файла во второй файл, добавить предыдущее содержимое второго файла во второй файл.   -  person Stultuske    schedule 24.02.2015


Ответы (3)


Вот фрагмент, который будет выполнять работу, как вы описали

Charset usedCharset = Charset.defaultCharset();

// read all lines from Convert.sql into a list
List<String> allLines = Files.readAllLines(Paths.get("Convert.sql"), usedCharset);

// append all lines from Entity.sql to the list
allLines.addAll(Files.readAllLines(Paths.get("Entity.sql"), usedCharset));

// write all lines from the list to file Entity.sql
Files.write(Paths.get("Entity.sql"), allLines, usedCharset);
person SubOptimal    schedule 24.02.2015
comment
супер!! большое спасибо!! :) ты молодец! - person Lana; 24.02.2015

Используйте FileWriter(file,true) для добавления в файл

File file=new File("Entity.sql");
FileWriter fileWritter = new FileWriter(file.getName(),true);
BufferedWriter bufferWritter = new BufferedWriter(fileWritter);

а затем прочитайте Convert.sql и запишите данные

bufferWritter.write(data);

Затем закройте буфер записи

bufferWritter.close();
person prasadmadanayake    schedule 24.02.2015

Если вы хотите обрабатывать целые файлы, вам вообще не нужно иметь дело со строками или интерпретировать содержимое как текст (т.е. применять кодировку символов):

Path in=Paths.get("Convert.sql"), out=Paths.get("Entity.sql");
byte[] old=Files.readAllBytes(out);
Files.copy(in, out, StandardCopyOption.REPLACE_EXISTING);
Files.write(out, old, StandardOpenOption.APPEND);

Просто как говорили другие, полностью прочитайте файл, который вы хотите добавить в начало, скопируйте другой файл и добавьте старые данные, которые вы прочитали на первом шаге.

Здесь используется API Java 7, но я думаю, что его стоит изучить.

person Holger    schedule 24.02.2015