2016-04-05 3 views
0

行の2つの部分に基づいてファイル内の行を削除しようとしています:本のタイトルとそのID。ユーザーに両方を入力させ、両方が1行であれば、その行を削除します。これは私が持っているコードですが、唯一の問題はremoveLineは "intから文字列に変換できません"ということです。 これを修正する方法を知っている人はいますか?Javaはファイルから行を削除します

  File inFile = new File("books.txt"); 

      if (!inFile.isFile()) { 

      return; 
      } 


      File tempFile = new File("books.txt" + "1"); 

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

      String line = null; 



      JTextField xField = new JTextField(10); 
      JTextField yField = new JTextField(10); 

      JPanel myPanel = new JPanel(); 
      myPanel.add(new JLabel("Title:")); 
      myPanel.add(xField); 
      myPanel.add(Box.createHorizontalStrut(15)); // a spacer 
      myPanel.add(new JLabel("ID:")); 
      myPanel.add(yField); 

      String removeLine = JOptionPane.showConfirmDialog(null, myPanel, 
       "Remove", JOptionPane.OK_CANCEL_OPTION); 
      if (removeLine == JOptionPane.OK_OPTION) { 



      while ((line = br.readLine()) != null) { 
      if (!line.trim().contains(removeLine)) { 
       pw.println(line); 
       pw.flush(); 
      } 
      } 

      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"); 
      } 
+0

*私はtryLineをintに変更しようとしていたのですが、removeLineをインクルードすると "メソッドには文字列のCharSequenceが含まれています"というエラーが返されます。 – jkjk

+0

あなたのソリューションはここで説明されていると思うhttp://stackoverflow.com/questions/6555040/multiple-input-in-joptionpane-showinputdialog xFieldとyFieldからユーザが導入した値は回復しません。 removeLineにはJOptionPane.OK_OPTIONまたはJOptionPane.CANCEL_OPTIONのみが含まれ、削除する本は含まれません – RubioRic

答えて

-1

JOptionPane.showConfirmDialog int型ではない文字列を返しますので、あなたはintにremoveLineの種類を変更する必要があります。

+0

返信いただきありがとうございます。私はすでに試してみましたが、その文字列に(CharSequence)が含まれているため、contains(lineToRemove)引数 "int"には適用されません。 – jkjk

+0

提出されたテキストを取得するには、別のメソッドを使用する必要があります。 'JOptionPane.showConfirmDialog'は、あなたが確認したかどうかだけを返します。 これは次のように行う必要があります。 'xField.getText()'と 'yField.getText()'を使って入力したIDとタイトルを格納する必要があります。次に、これらの両方がライン内に別々に存在するかどうかを確認します。 –

+0

私はshowInputDialogを使用することができますが、それは私に3箱を与えます。 xFieldとyFieldの2つのボックスと、基本的に何もしない1つの大きなボックス。 – jkjk

関連する問題