0

だから私はDataInputStream、FileInputStream、BufferInputStream、FileReader、BufferedReader、Scannerなどを使用しました。それらはすべて、FileNOTFoundException または CorruptedStreamException をスローします。

例外 java.io.FileNotFoundException: java.io.FileReader@253498.data (指定されたファイルが見つかりません) が、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;
          }

}
4

3 に答える 3

1

おそらく、テキスト ファイルは、フォルダーではなく、「プロジェクト ルート」フォルダー (srcおよびを含むフォルダー) に配置する必要があります。これを Eclipse から実行している場合、Eclipse から実行される Java プロジェクトのコンテキストは常にそのプロジェクトの Eclipse プロジェクト フォルダーであるため、これは間違いなく必要なことです。binbin

パスを指定せずに名前でファイルを開くよう Java に指示すると、JVM は現在の作業ディレクトリでファイルを探します。現在の作業ディレクトリは、プログラムの実行方法によって異なります。この場合、「bin」フォルダーは現在の作業ディレクトリではないようです。

于 2012-10-17T02:58:07.310 に答える
0

コマンド ラインを使用している場合は、java コマンドを実行しているフォルダにファイルを置き、.CLASSPATH に次のように追加します。

  set CLASSPATH=%CLASSPATH%;.

次に、Java プログラムを実行します。

Eclipse を使用している場合は、ファイルをプロジェクトのルート フォルダーに配置するか、ルート フォルダーに対する相対パスを使用してみてください。

于 2012-10-17T03:19:45.123 に答える
0

テキスト ファイルを他のフォルダに移動してみてください。bin フォルダーの 1 つのフォルダーは、おそらく適切な場所です。

于 2012-10-17T02:52:24.493 に答える