从文本文件中读取会引发异常

时间:2012-10-17 02:49:33

标签: java eclipse loading save

所以我使用了DataInputStream,FileInputStream,BufferInputStream,FileReader,BufferedReader,Scanner,你可以命名它。它们都抛出FileNOtFoundException或CorruptedStreamException。

例外 java.io.FileNotFoundException:java.io.FileReader@253498.data(系统找不到指定的文件) 在FileReader初始化的行上抛出文件名为“Accounts.txt”的文件,这是我在bin中初始化的文件,其中包含所需的文本。

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;
          }

}

3 个答案:

答案 0 :(得分:1)

您可能需要将文本文件放在“项目根目录”文件夹(包含srcbin的文件夹)中,而不是bin文件夹中。如果您从Eclipse运行它,这肯定是您需要做的,因为从Eclipse运行的Java项目的上下文始终是该项目的Eclipse项目文件夹。

当您要求Java按名称打开文件而不给它路径时,JVM将在其当前工作目录中查找该文件。当前工作目录根据您运行程序的方式而变化,在您的情况下,“bin”文件夹看起来不是您当前的工作目录。

答案 1 :(得分:0)

尝试将文本文件移动到其他文件夹。 bin文件夹中的一个文件夹可能是正确的位置。

答案 2 :(得分:0)

如果您使用的是命令行,请将该文件放在运行java命令的文件夹中,并在CLASSPATH中添加.

  set CLASSPATH=%CLASSPATH%;.

然后运行你的java程序。

如果您正在使用eclipse,请尝试将该文件放在项目的根文件夹中,或使用相对于根文件夹的相对路径。