Java читает из одного файла и записывает в другой файл с помощью методов

Я изучаю Java и работаю над файловым вводом-выводом и сейчас застрял в чтении текста из одного файла и записи в другом файле. Я использую два разных метода: первый для чтения и отображения текста в консоли из файла № 1 и другой метод для записи в файл № 2.

Я могу успешно читать и отображать содержимое из файла № 1, но не знаю, как записать текст в файл № 2.

Вот код, который я написал до сих пор:

import java.io.*;
public class ReadnWrite {
    public static void readFile() throws IOException {
        BufferedReader inputStream = new BufferedReader(new FileReader(
                "original.txt"));
        String count;
        while ((count = inputStream.readLine()) != null) {
            System.out.println(count);
        }
        inputStream.close();
    }
    public static void writeFile() throws IOException{
        BufferedWriter outputStream = new BufferedWriter(new FileWriter(
        "numbers.txt"));

//Not sure what comes here
    }
    public static void main(String[] args) throws IOException {
        checkFileExists();
        readFile();
    }
}

Это просто для моего собственного обучения, так как есть много примеров для чтения и записи без использования разных методов, но я хочу узнать, как я могу добиться этого с помощью разных методов.

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

С уважением,


person Newbie    schedule 03.02.2015    source источник
comment
Вы хотите читать из original.txt и записывать все в number.txt?   -  person jnd    schedule 03.02.2015
comment
возможный дубликат Как написать текстовый файл Java   -  person null    schedule 03.02.2015
comment
О обыкновенный человек, используйте свой здравый смысл. Ссылка использует код, написанный внутри метода Main. Я могу легко добиться этого, но я хочу использовать два разных метода без использования объекта Reader в методе записи.   -  person Newbie    schedule 03.02.2015
comment
#Farhang Amary, пожалуйста, внимательно прочитайте вопрос, прежде чем публиковать любой возможный повторяющийся вопрос. Я прошел по ссылке, и это использует запись в файл в Main(), а также я не хочу писать какой-то глупый текст HELLO WORLD самостоятельно. Я хочу записать все, что я читаю из файла № 1 (original.txt), и записать его в файл № 2 (numbers.txt).   -  person Newbie    schedule 03.02.2015


Ответы (3)


Вы можете записать в другой файл, используя: outputStream.write(). И когда вы закончите, просто outputStream.flush() и outputStream.close().

Редактировать:

public void readAndWriteFromfile() throws IOException {
    BufferedReader inputStream = new BufferedReader(new FileReader(
            "original.txt"));
     File UIFile = new File("numbers.txt");
        // if File doesnt exists, then create it
        if (!UIFile.exists()) {
            UIFile.createNewFile();
        }
    FileWriter filewriter = new FileWriter(UIFile.getAbsoluteFile());
    BufferedWriter outputStream= new BufferedWriter(filewriter);
    String count;
    while ((count = inputStream.readLine()) != null) {
        outputStream.write(count);
    }
    outputStream.flush();
    outputStream.close();
    inputStream.close();
person jnd    schedule 03.02.2015
comment
Спасибо, #jnd, но если я попытаюсь просто передать outputStream.write(); java выдает мне ошибку, что отсутствует аргумент для соответствия .write(), а также откуда java знает, что я хочу сохранить в файле. Я считаю, что мне нужно поместить весь текст из файла original.txt в объект или массив, а затем записать содержимое массива/объекта в outputStream.write(); для записи в файл numbers.txt. - person Newbie; 03.02.2015
comment
Вы приводите в качестве аргумента то, что хотите написать. Например outputStream.write("hello"); или outputStream.write(15); - person jnd; 03.02.2015
comment
#jnd Думаю, вы не поняли мой вопрос, так как я извлекаю текст из файла №1 и записываю в файл №2. Не то чтобы я хотел написать что-то от себя в кавычках... - person Newbie; 03.02.2015
comment
Спасибо #jnd за ответ. Это почти похоже на то, что я хотел. Я добился желаемых результатов с помощью вашего кода, но могу ли я задать вам вопрос, который, например. Если моя программа просит пользователя нажать 1 для чтения из файла и 2 для записи в новый файл, и должен ли я использовать этот метод BufferedReader и читать файл, если пользователь нажимает 2, или есть ли способ, которым пользователь нажал 1 и программа сохранила все содержимое файла в массиве/массиве, и когда пользователь нажал 2, она записывает все из этого массива/массива в файл №2. - person Newbie; 03.02.2015
comment
Вы можете поступить так или иначе. Вы просто заставите свой метод чтения возвращать массив строк, а затем передадите его своему методу записи для записи. - person jnd; 03.02.2015
comment
Нет необходимости вызывать outputStream.flush(); .. он будет вызываться неявно с помощью outputStream.close(); - person Maher Abuthraa; 14.02.2017

Вот мой способ копирования файлов:

BufferedReader br = null;
BufferedWriter bw = null;

try {
    br = new BufferedReader(new InputStreamReader(new FileInputStream(new File("origin.txt"))));
    bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File("target.txt"))));

    int i;
    do {
        i = br.read();
        if (i != -1) {
            bw.write(i);
        }
    } while (i != -1);

} catch (IOException e) {
    System.err.println("error during copying: "+ e.getMessage());
} finally {
    try {
        if (br != null) br.close();
        if (bw != null) bw.close();
    } catch (IOException e) {
        System.err.println("error during closing: "+ e.getMessage());
    }
}
person Maher Abuthraa    schedule 14.02.2017

Я бы использовал BufferedReader, обертывающий FileReader, и BufferedWriter, обертывающий FileWriter.

Поскольку вы хотите сделать это, используя два разных метода, вы должны хранить данные в List<String> data, чтобы передавать их между методами.

public class ReadnWrite {

    public static List<String> readFile() throws IOException {
        try(BufferedReader br = new BufferedReader(new FileReader("original.txt"))){
            List<String> listOfData = new ArrayList<>();
            String d;
            while((d = br.readLine()) != null){
                listOfData.add(d);
            }
            return listOfData;
        }
    }

    public static void writeFile(List<String> listOfData) throws IOException{
        try(BufferedWriter bw = new BufferedWriter(new FileWriter("numbers.txt"))){
            for(String str: listOfData){
                bw.write(str);
                bw.newLine();
            }
        }
    }

    public static void main(String[] args) throws IOException {
        List<String> data = readFile();
        writeFile(data);
    }
}

В качестве альтернативы, если вам не нужно выполнять операции с данными между чтением и записью, я бы также сделал это одним методом.

public class CopyFileBufferedRW {

    public static void main(String[] args) {
        File originalFile = new File("original.txt");
        File newFile = new File(originalFile.getParent(), "numbers.txt");

        try (BufferedReader br = new BufferedReader(new FileReader(originalFile));
             BufferedWriter bw = new BufferedWriter(new FileWriter(newFile))) {
            String s;
            while ((s = br.readLine()) != null) {
                bw.write(s);
                bw.newLine();
            }
        } catch (IOException e) {
            System.err.println("error during copying: " + e.getMessage());
        }
    }
}
person xtra    schedule 21.12.2018