2017-07-26 89 views
0

我正在編寫一個程序,要求我能夠將個人的個人信息寫入excel文件。我必須能夠讀取這個文件的內容並將它們呈現在組合框中。但是,如果我運行程序並輸入個人的詳細信息,然後使用組合框選擇其中一個人,那麼在程序的當前運行中輸入的任何人都不會顯示在組合框中。然而,如果我關閉程序並重新運行它們,它們就會出現。我怎樣才能解決這個問題?如何在閱讀文件之前更新文件的內容?

String csvFile = "Clients.csv"; 
     BufferedReader br = null; 
     String line = ""; 
     String cvsSplitBy = ","; 
     String fullName = null; 

     try { 
      File file = new File("Clients.csv"); 
      br = new BufferedReader(new FileReader(file)); 
      while ((line = br.readLine()) != null) { 
       String[] data = line.split(cvsSplitBy); 
       fullName = data[0]+" "+data[1]; 
       comboBox_1.addItem(fullName); 
      } 

     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
      if (br != null) { 
       try { 
        br.close(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
     //FILE READING END 
     comboBox_1.setBounds(130, 25, 584, 20); 
     existingClients.add(comboBox_1); 

回答

0

當你運行你的程序時,你的BufferedReader被提供了當前數據的csv文件。在運行時,程序不知道您是否在csv文件中輸入了新條目。

你應該編寫一個代碼塊,當你點擊「添加人員」按鈕(或者你在程序中調用它)時,更新csv文件,然後觸發一個新的BufferedReader。

編輯:

我不知道你的程序是一個GUI或控制檯應用程序,但我會盡量解釋,就好像我們是在談論一個GUI。

步驟1 - >當用戶在程序的textarea中填寫新人的詳細信息,或當他/她點擊「添加人員」按鈕時,應該存儲此人的詳細信息。

第2步 - >然後你必須創建一個作家實例。此實例必須將新數據附加到您的csv文件;

BufferedWriter writer = new BufferedWriter(new FileWriter(csvFile)); 
writer.write("\n" + newPersonDataasString + "\n"); 

步驟 - 3 - >最後,你必須再次使用與您的CSV文件送入一個新的BufferedReader閱讀您的文件。

作爲exe-cute-table提到的,將這些步驟封裝到像readFile()這樣的自定義方法中,writeFile()對於維護目的來說是一個很好的解決方案。

如果我誤導了你,讓我現在。

+0

我不確定如何更新文件或添加新的BufferedReader。 –

+0

編輯我的答案。 – arkantos

+0

對,所以你說我需要一個新的BufferedReader,所以你的意思是我需要2個,或者在寫入文件後有一個? –

0

每次在文件中寫入時,都必須再次打開它(與BufferedReader一樣),才能看到更改。 BufferedReader一旦創建,將不會存儲您CSV文件的新更改。

所以最好的辦法是有兩個功能:

  • readFile(filename)將讀取使用該文件的BufferedReader(這是創建,使用和關閉)

  • writeFile(filename, contentToWrite)將寫入到文件使用BufferedWriter(它也被創建,使用和關閉)

每次你添加一個人,請致電writeFile("your.csv", your_data)。 每次你想從你的csv顯示數據(例如列出所有存儲的人)時,請致電readFile("your.csv")

+0

我不太明白如何應用你所告訴我的。 –

+0

簡而言之,您不能僅使用一個BufferedReader實例來讀取您的文件並查看您在此文件中所做的更改。每次編輯CSV時,都必須再次打開它(您準確填入您的問題的代碼)。這意味着您需要創建BufferedReader,讀取行(br.readLine),將數據存儲爲值並關閉它。 我建議你創建兩個函數,因爲你似乎正在讀取和寫入CSV文件多次。 –

+0

那麼每個BufferedReader都來自哪裏? –