Java文件IO异常

时间:2012-03-23 12:04:43

标签: java file io

我正在尝试创建一个简单的程序,用于保存收集数据的文本日志。为了进行设置,我在程序开始时运行以下代码(设置日志文件,以及使用它的工具):

File logFile = new File("logs/logFile.txt");
FileWriter fw;
FileReader fr;
BufferedWriter writer;
BufferedReader reader;

public void someMethod(){
    System.out.println(logFile.getAbsolutePath());
    try{
        logFile.createNewFile();
    }catch(Exception e){
        System.err.println("WARNING: CANNOT CREATE FILE");
    }
    try{
        fw = new FileWriter("plugins/Stalker/log.txt");
        fr = new FileReader("plugins/Stalker/log.txt");
        writer = new BufferedWriter(fw);
        reader = new BufferedReader(fr);
    } catch(Exception e){
        System.err.println("ERROR: CANNOT READ OR WRITE TO LOG FILE");
    }
}

当我运行时,我遇到了两个异常。它不会在第一个println中给出的路径上创建文件或文件夹(日志)。路径就像我期望的那样,我应该对该目录具有写权限(我知道其他程序经常将日志写入父目录这一事实)...我已经使用了一些文件之前,但它已经有点了,我在这里完全失去了。

我可能遇到什么样的问题?你会建议尝试解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

使用文件夹时,必须确保该文件夹存在。

为此你必须在logFile.createNewFile();之前写一个条件来检查文件夹是否存在,因为createNewFild不会创建文件夹。

你必须像这样修改程序。

File logFileFolder = new File("logs");
File stalkerFolder = new File("plugins/Stalker");
File logFile = new File("logs/logFile.txt");
FileWriter fw;
FileReader fr;
BufferedWriter writer;
BufferedReader reader;

public void someMethod(){
    System.out.println(logFile.getAbsolutePath());
    try{
        if (!logFileFolder.exists()){
             // Create folder if does not exist
             logFileFolder.mkdir();
        }
        logFile.createNewFile();
    }catch(Exception e){
        System.err.println("WARNING: CANNOT CREATE FILE");
    }
    try{
        if (!stalkerFolder.exists()){
             // Create folders if does not exist
             stalkerFolder.mkdirs();
        }
        fw = new FileWriter("plugins/Stalker/log.txt");
        fr = new FileReader("plugins/Stalker/log.txt");
        writer = new BufferedWriter(fw);
        reader = new BufferedReader(fr);
    } catch(Exception e){
        System.err.println("ERROR: CANNOT READ OR WRITE TO LOG FILE");
    }
}

答案 1 :(得分:0)

您可以使用exists中提供的File方法来测试它是否存在。

如果我没记错的话,FileWriter会创建一个文件,如果它已经存在的话。检查其他构造函数是否附加。

但是,我认为您遇到的问题是因为您在尝试阅读之前没有关闭该文件。

为了刷新流,您需要调用close

此外,与Ravindra Gullapalli提到的一样,您还需要在尝试创建文件之前检查文件夹是否存在。如果没有,则需要使用mkdirs方法创建它们。