2013-10-17 71 views
0

我正在寫一個程序,允許用戶使用randomaccessfile寫入文本文件。用戶輸入姓名,年齡和地址,每個項目爲20個字節,因此記錄長度爲60個字節。當用戶想要查找記錄時,他們輸入一個記錄號,程序去查找(n * 60),然後這60個字節被存儲到一個字節數組中,然後被輸出。除了當用戶想要最後一條記錄時,這工作正常。我無法找到在名稱,年齡,地址之後添加額外空間以填充60個字節的方法。由於這個,我得到錯誤java.io.EOFException:null。RandomAccessFile:在最後一項之後添加空格?

這裏是我用來寫文件的代碼:

 while(!done){ 
     junk.seek(y); 
     System.out.println("Enter name."); 
     junk.writeBytes(sc.nextLine()); 
     y+=20; 
     System.out.println("Enter age."); 
     junk.seek(y); 
     junk.writeBytes(sc.nextLine()); 
     y+=20; 
     System.out.println("Enter city."); 
     junk.seek(y); 
     junk.writeBytes(sc.nextLine()); 
     y+=20; 
     System.out.println("Are you done?(Y/N)"); 
     choice = sc.nextLine(); 
     if(choice.equalsIgnoreCase("Y")){ 
      done = true; 
     } 

所以基本上我怎麼能在文本文件的最後一個項目之後添加額外的空白?

回答

1

首先,爲什麼你要分配20個字節的年齡?這真的很重要,你的用戶活着多少年! 可能的錯誤是上次數據插入(當用戶說沒有任何數據時N),因爲如果插入例如new york,而這沒有得到20個字節,那麼最後一部分將小於60字節,反之亦然,如果用戶輸入a very far far far city with friend batman,而這是超過20個字節,它會擴展數據。

所以爲了解決,你應該確保最後的數據也應該是20個字節。

while(!done){ 
     junk.seek(y); 
     System.out.println("Enter name."); 
     junk.writeBytes(sc.nextLine()); 
     y+=20; 
     System.out.println("Enter age."); 
     junk.seek(y); 
     junk.writeBytes(sc.nextLine()); 
     y+=20; 
     System.out.println("Enter city."); 
     junk.seek(y); 
     String city=sc.nextLine(); 
     System.out.println("Are you done?(Y/N)"); 
     choice = sc.nextLine(); 
     if(choice.equalsIgnoreCase("Y")){ 
      if(city.length()>20){city-city.substring(0,20);} 
      else if(city.length()<20){city=city+new String(new byte[20-city.length()]);} 
      done = true; 
     } 
     junk.writeBytes(city); 
     y+=20; 
} 

試試這個,試試看。而我仍然認爲你使用的方法實際上是非邏輯的。

+0

我發現使用像#這樣的填充字符修復了這個問題,而不是空的空間。但是,謝謝,我只是選擇了20個字節,因爲這是我第一次,謝謝! – TheEyesHaveIt

+0

問題解決了嗎? – 2013-10-18 11:22:10

+0

是非常多 – TheEyesHaveIt

相關問題