2016-04-05 77 views
0

我想根據行中的2個部分刪除文件中的一行:書名和它的ID。我希望用戶輸入兩者,如果他們都在一行中,請刪除該行。這是我的代碼,但唯一的問題是,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

*以防萬一有人想知道我是否嘗試將removeLine更改爲int,但隨後contains(removeLine)給我提供了錯誤「方法contains(CharSequence)在類型字符串中不適用於參數int」 – jkjk

+0

I認爲你的解決方案在這裏解釋http://stackoverflow.com/questions/6555040/multiple-input-in-joptionpane-showinputdialog你不會恢復用戶從xField和yField引入的值。 removeLine將只包含JOptionPane.OK_OPTION或JOptionPane.CANCEL_OPTION而不是要刪除的書 – RubioRic

回答

-1

JOptionPane.showConfirmDialog返回一個int不是字符串,所以你應該改變removeLine的類型爲int。

+0

感謝您的回覆,我已經嘗試過,但包含(lineToRemove)不起作用,因爲「該方法包含(CharSequence)類型字符串不適用於參數int「 – jkjk

+0

您需要使用不同的方法來獲取他們提交的文本,」JOptionPane.showConfirmDialog'只會告訴您他們是否已確認。 你應該這樣做,如下所示。您需要通過獲取'xField.getText()'和'yField.getText()'來存儲他們輸入的ID和標題。然後,檢查這兩者是否在單獨的行中。 –

+0

我能夠使用showInputDialog,但它給了我3盒。 2盒用於xField和yField以及一個基本上什麼都不做的大盒子。 – jkjk