当前位置: 首页 > 知识库问答 >
问题:

读取文本文件引发异常

隗和裕
2023-03-14

所以我使用了DataInputStream、FileInputStream、BufferInputStream、FileReader、BufferedReader、Scanner。它们都抛出FileNOtFoundException或CorruptedStreamException。

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

}

共有1个答案

谷梁智
2023-03-14

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

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

 类似资料:
  • 可以使用FileReader直接读取文本文件 我们为什么需要使用InputStream方法

  • 我试图通过创建一个函数来编写一个简单的文本文件阅读器,该函数接受文件的路径并将每行文本转换为char数组,但它不起作用。 这里出了什么问题? 从以前的修订版更改了一点代码后,这似乎仍然不起作用,现在它给我一个异常101。 我在Firefox上测试过这个功能,它可以工作,但在Google Chrome上它就是不工作,它一直给我一个异常101。我如何让它不仅适用于Firefox,还适用于其他浏览器(尤

  • 问题内容: 我想读取不同块的日志文件,以使其成为多线程。该应用程序将在具有多个硬盘的服务器端环境中运行。读取成块后,应用程序将处理每个块的每一行。 我已经用bufferedreader完成了对每个文件行的读取,并且可以通过将RandomAccessFile与MappedByteBuffer结合使用来制作文件块,但是将这两者结合起来并不容易。 问题在于该块正好切入我块的最后一行。我从来没有块的最后一

  • 问题内容: 我如何阅读像android app中的文本文件: 所以我可以返回一个字符串,如: 我想到的是(伪代码): 问题答案: 试试这个

  • 问题内容: 我在使用BufferedReader时遇到问题 我想打印一个文本文件的6行: 现在,从每次调用readLine()方法可以收集到的信息开始,它都会自动前进到下一行。 所以我不能使用条件br.readLine()!= null,因为它已经将其前进了一行,并且我得到了输出: 我使用什么条件来检查文本字段中是否还有新行。 提前致谢! 问题答案: 这就是问题: 您有两次调用-第一个 仅 检查是