2012-10-17 97 views
0

因此,我使用了DataInputStream,FileInputStream,BufferInputStream,FileReader,BufferedReader,Scanner等名稱。它們都拋出FileNOtFoundException或CorruptedStreamException。從文本文件中讀取拋出異常

異常 java.io.FileNotFoundException:[email protected](系統找不到指定的文件) 被扔在其中的FileReader與文件名初始化「Accounts.txt」行,這是一個我已經初始化的文件,在文件箱中,需要它的文本。

import java.io.*; 
import java.util.ArrayList; 

/** 
* Class to load account files 
*/ 
public class AccountLoader { 

    /** 
    * Add an account file 
    * @param newAccount 
    */ 
    public static void addAcountFile(Account newAccount) { 
     try { 
      PrintWriter out = new PrintWriter(new File("Accounts.txt")); 

      out.print(" " + newAccount.getOwner().getName()); 
      System.out.println("saved account " + newAccount.getOwner().getName()); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } 
    } 


    public static ArrayList<Account> loadAccountsList() throws EOFException, IOException, ClassNotFoundException{ 
     ArrayList<Account> accounts = new ArrayList(); 

      FileReader load = new FileReader("Accounts.txt"); 

      String file = load.toString(); 

      String[] accountsload = file.split(" "); 
      for (String string : accountsload){ 
       accounts.add(loadAccount(string + ".data")); 
      } 
      load.close(); 
      return accounts; 

    } 
    public static void save(Account account) { 

     String filename = account.getOwner().getName() + ".data" ; 
      if (filename != null) {   
      try { 
      FileOutputStream fos = new FileOutputStream(filename); 

      ObjectOutputStream out = new ObjectOutputStream(fos); 


      out.writeObject(account);  

      out.flush();      
      out.close();       
      } 

      catch (IOException e) { System.out.println(e); } 
     } 

     } 

    public static Account loadAccount(String filename) { 
      Account newAccount = null; 
      if (filename != null) {   
       try { 

       FileInputStream fis = new FileInputStream(filename); 

       ObjectInputStream in = new ObjectInputStream(fis); 

       newAccount = (Account)in.readObject(); 
       in.close();          
       } 

       catch (Exception e) { System.out.println(e); } 
      } 
      return newAccount; 
      } 

} 
+0

您是否使用命令行運行? –

+2

我99%確定你沒有在正確的位置查找文件,用戶目錄,就像99%的經常***問這個問題的人(如果我有一個每季度一次......)。通過運行這一行找到用戶目錄:'System.out.println(System.getProperty(「user.dir」));' –

+0

@HovercraftFullOfEels如果我有一個季度,每次你是對的... – MadProgrammer

回答

0

嘗試將文本文件移動到其他文件夾。超出bin文件夾的一個文件夾可能是正確的位置。

+0

Woops,我撒謊了。它位於垃圾箱一步之外的文件夾中。 – Swanijam

1

您可能需要將文本文件放入「項目根目錄」文件夾(包含srcbin),而不是bin文件夾。如果你是從Eclipse運行這個,那肯定是你需要做的,因爲從Eclipse運行的Java項目的上下文始終是該項目的Eclipse項目文件夾。

當您要求Java通過名稱打開文件而不給它一個路徑時,JVM將在其當前工作目錄中查找該文件。當前工作目錄根據你運行程序的方式而變化,在你的情況下,它看起來像「bin」文件夾不是你當前的工作目錄。

+0

它實際上在項目的根文件夾中。我的錯。 – Swanijam

0

如果使用命令行,把文件從正在運行java命令的文件夾中,並在CLASSPATH中添加.作爲

set CLASSPATH=%CLASSPATH%;. 

,然後運行Java程序。

如果您使用的是eclipse,請嘗試將該文件放在項目的根文件夾中或使用相對於根文件夾的相對路徑。

+0

我正在使用eclipse,並且該文件位於根文件夾中。 – Swanijam

+0

通過'root'文件夾,我的意思是項目文件夾不是'src'或'JavaSource'。它在項目文件夾(src文件夾的父目錄)中嗎? –

+0

是的。無論如何,該文件夾是從這個類首先保存的,所以工作目錄必須是相同的,對嗎? – Swanijam

相關問題