0

「UPDATES」、「DELETES」、および「INSERTS NEW CONTENT」をテキストファイルに作成するクラスを作成しようとしています。「更新」と「削除」の部分は正しく機能します。「新しいコンテンツの挿入」は何もしていないようです」。コードで何が間違っているか、欠けているかについて誰かアドバイスをください。

エラー レポートもコード エラーのハイライトも表示されません。

新しいコンテンツがテキスト ファイルにない場合は、テキスト ファイルに新しいコンテンツを書き込もうとしています。これは、ユーザーが新しいユーザーである場合に、保存のためにユーザーの詳細をテキスト ファイルに入力する場合と似ています。すでに登録されている場合、新しいデータは入力されませんが、以前に保存された詳細を編集または削除できます。

誰かができるところを手伝ってくれたら本当にありがたいです。

前もって感謝します。

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

public class EditDelete {

    static PrintWriter pw;
    static String line = null;

    public static void newEntry() {
        pw.println("A NEW ENTRY");
        pw.flush();
    }

  public static void removeLineFromFile(String file, String lineToRemove) {

    try {

      File inFile = new File("/D:/TestFile.txt/");

      if (!inFile.isFile()) {
        System.out.println("Parameter is not an existing file");
        return;
      }

      //Construct the new file that will later be renamed to the original filename.
      File tempFile = new File(inFile.getAbsolutePath() + ".tmp");

      BufferedReader br = new BufferedReader(new FileReader(file));
      pw = new PrintWriter(new FileWriter(tempFile));

      //Read from the original file and write to the new
      //unless content matches data to be removed.
      while ((line = br.readLine()) != null) {
        if (!line.startsWith(lineToRemove)) {
          pw.println(line);
          pw.flush();
        } else if (line.startsWith(lineToRemove)) {
          pw.println("THIS GOT CHANGED" + "\n" + "\n");
          pw.flush();
        } else if (!line.startsWith(lineToRemove) && !line.startsWith(lineToRemove)) {
            newEntry();
        }
      }
      pw.close();
      br.close();

      //Delete the original file
      if (!inFile.delete()) {
        System.out.println("Could not delete file");
        return;
      }

      //Rename the new file to the filename the original file had.
      if (!tempFile.renameTo(inFile))
        System.out.println("Could not rename file");

    }
    catch (FileNotFoundException ex) {
      ex.printStackTrace();
    }
    catch (IOException ex) {
      ex.printStackTrace();
    }
  }

}
4

2 に答える 2

0

このコードは意味がありません:

    if (!line.startsWith(lineToRemove)) {
      pw.println(line);
      pw.flush();
    } else if (line.startsWith(lineToRemove)) {
      pw.println("THIS GOT CHANGED" + "\n" + "\n");
      pw.flush();
    } else if (!line.startsWith(lineToRemove) && !line.startsWith(lineToRemove)) {
        newEntry();
    }

条件を見てください:

  1. そこから始まらないと…
  2. それがそれで始まる場合...(しかし、それは他の意味です)
  3. 他の可能性はないので、3番目の可能性はありません。(つまり、それで始まるか、そうでないかのどちらかです。)[しかし、コードを見ると、同じことを2回テストしますが、1回は常に真です。a && aはいつも一人と同じaです。]

あなたは3つのことのうちの1つをしたいと思っています。アクション用の関数に別の引数を追加し、追加する新しい行用に別の引数を追加します。常に削除するわけではないため、もう一方の名前を変更します。

public static void removeLineFromFile(String file, int action, String lineToFind, String newLine) {

次に、次のようにテストを行います。

switch (action) {
case 1:
    ... remove line
    break;
case 2:
    ... replace line with 'newLine'
    break;
case 3:
    ... add 'newLine' after the old line
    break;
default:
    throw new RuntimeException("Illegal Option");
}

「lineToFind」に一致しない行は必ず書き直してください

于 2013-07-29T21:19:26.087 に答える