базовая замена текста ввода / вывода Java, не получая ожидаемого вывода - PullRequest
0 голосов
/ 31 января 2012

У меня есть текстовый файл с данными таблицы базы данных, и я пытаюсь удалить часть таблицы. это то, что находится в файле:

name= john
name= bill
name= tom
name= bob
name= mike

вот мой java-код, который компилируется и запускается, но вывод не тот, который я ожидал и застрял.

import java.io.*;
public class FileUtil {

    public static void main(String args[]) {

        try {

            FileInputStream fStream = new FileInputStream("\\test.txt");
            BufferedReader in = new BufferedReader(new InputStreamReader(fStream));


            while (in.ready()) {
                //System.out.println(in.readLine());
                String line = in.readLine();
                String keyword = "name="; //keyword to delete in txt file
                String newLine=line.replaceAll(keyword,""); //delete lines that say name=
                BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("testEdited.txt"));
                out.write(newLine.getBytes());
                out.close();

            }
            in.close();

        } catch (IOException e) {
            System.out.println("File input error");
        }

    }
}

вывод в файле testEdited такой:

1009 * микрофон *

очевидно, я хочу остаться только с 5 именами. Может кто-нибудь мне помочь? спасибо

Ответы [ 3 ]

2 голосов
/ 31 января 2012

Попробуйте это ...

        String line;
        BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("testEdited.txt"));

        while ((line = in.readLine()) != null) {
            String newLine=line.replaceAll("name=","");
            out.write(newLine.getBytes());
        }
        out.close();
        in.close();

Нет необходимости открывать и закрывать выходной файл.

Также в отношении объявления "name =" нет особого смысла присваивать переменной и использовать ее только в строке, следующей за ней. Если это должна быть общая константа, объявите ее как (private|public) static final String foo = "bar"; в каком-то классе.

Кроме того, нет ничего особенного в том, чтобы обернуть поток вывода файла (или средство записи файла) в соответствующую буферизованную версию, операционная система автоматически буферизует записи для вас, и в этом она хорошо справляется.

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

2 голосов
/ 31 января 2012

попробуйте это:

BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("testEdited.txt",true));

true добавит данные в ваш файл.

0 голосов
/ 31 января 2012

Нельзя использовать BufferedInputStream/BufferedOutputStream для параллельных операций чтения и записи.Пожалуйста, используйте RandomAccessFile, если вы хотите одновременно читать и писать в файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...