-1

ファイルの内容を読み取って、指定された文字列を削除しようとしていますが、まだ成功していません。私もこのリンクを試しました

しかし、それは機能していません.ignorecaseも試してみましたが、その場合、ファイル全体が削除されました. :(

私自身のコードは

BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), charset));
        PrintWriter writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(tempfile), charset));  BufferedWriter bw = new BufferedWriter(writer);

        while((currentLine = reader.readLine()) != null)
        {
            //System.out.println(currentLine);

            if (currentLine.equals(del))
            currentLine = currentLine.replace(del, "");
            writer.write(currentLine);

        }
      tempfile.renameTo(file);
4

5 に答える 5

0

元のコードのほとんどを保持し、ファイル全体を List に格納することを避けることができます (ファイルが大きい場合、これは問題になる可能性があります)。これはあなたが遊ぶことができるスタンドアロンです:

import java.io.*;

public class StringRepl {
    public void doReplace(String oldFileName, String newFileName) {
        File oldFile = new File(oldFileName);
        File tempFile = new File(newFileName);

        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(oldFile), "utf-8"));

            PrintWriter writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(tempFile), "utf-8"));
            BufferedWriter bw = new BufferedWriter(writer);
            String currentLine;
            String del = "hi";
            while((currentLine = reader.readLine()) != null)
            {
                //System.out.println(currentLine);

                if (currentLine.contains(del))
                    currentLine = currentLine.replace(del, "");
                bw.write(currentLine);
                bw.newLine();

            }
            bw.close();
            reader.close();
            writer.close();
            //tempFile.renameTo(oldFile);
        } catch (FileNotFoundException fnfe) {
            System.out.print("No file found: " + oldFileName);
        } catch (UnsupportedEncodingException uee) {
            System.out.print("'utf-8' not supported");
        } catch (IOException ioe) {
            System.out.print("Error using file!");
            ioe.printStackTrace();
        }
    }

    public static void main(String[] args) {
        StringRepl sr = new StringRepl();
        sr.doReplace("o.txt","n.txt");
    }
}

コンパイルして実行します。

javac StringRepl.java
java StringRepl

o.txt:

hi how are you?
I am fine.
again hi hi.

n.txt:

 how are you?
I am fine.
again  .
于 2013-09-09T09:20:27.887 に答える
0

あなたはこのようにすることができます

    BufferedReader br = new BufferedReader(new FileReader("D:\\test.txt"));
    List<String> lines=new ArrayList<>();
    String currentLine = new String();
    while ((currentLine = br.readLine()) != null) {
        if (currentLine.contains("hi")) {
            lines.add(currentLine.replace("hi", ""));
        }else {
            lines.add(currentLine);
        }
    }
    BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\test.txt"));
    for (String i:lines){
       bw.write(i);
       bw.newLine();
    }
    bw.close();

これが私の入力です。

   hi how are you?
   I am fine.
   again hi hi.

出力

how are you?
I am fine.
again  .
于 2013-09-09T08:37:12.107 に答える
0

ロジックは、行全体が一致する場合にのみ文字列を削除します. 各行の文字列の一部を一致させたい場合は、文字列クラスで利用可能な一致 (または) 部分文字列メソッドを使用してみてください

于 2013-09-09T07:44:14.107 に答える