用Java写入文件:找不到指定的路径

时间:2011-08-17 15:05:31

标签: java logging io file-writing

我在使用Java写一个简单的文本文件时遇到了很大的困难。我为IO异常所做的每一次搜索都提出了很多建议,但没有一个适用于这种情况。

这是我的项目结构:

MyEclipseProject/
    src/
        com.myprogram.utils
            MyProgram
    bin/

我的代码 MyProgram.java

package com.myprogram.utils;

import java.io.FileWriter;

public class MyProgram
{
    public static void main(String[] args)
    {
        FileWriter oWriter = new FileWriter(new File("logs/system.log"));
        oWriter.write("This never gets logged because JRE can't find the file");
    }
}

我收到的异常消息指出: logs \ system.log(系统找不到指定的路径)

我第一次尝试时,没有首先创建logs/目录及其后续日志文件。我的理解是,如果Java找不到该文件,它会为你创建它。

我现在放置了一个logs文件夹 - 一个空白的system.log文件 - 里面:(1)我的项目根目录(MyEclipseProject),(2)src/文件夹,(3)src/com.myprogram.utils包,以及(4)bin文件夹,我得到了同样的错误。我想知道:我可以继续操作OS / persmissions吗?我的应用程序可以尝试来创建文件夹和日志文件,但是被Windows 7拒绝这样做吗?如果是这样,我该怎么办?!?!

如果没有,我在哪里放置logs/system.log ???

感谢你明白这一点!

5 个答案:

答案 0 :(得分:6)

要查看您所在的目录,请添加以下print语句:

System.out.println(new File(".").getAbsolutePath());

这将告诉您应在何处创建logs目录。

答案 1 :(得分:0)

尝试BufferedWriter

public static void main(String[] args {

String filename = "C:\\mynewtextfile.txt";
FileWriter fstream;
   try {
   fstream = new FileWriter(filename);
   BufferedWriter out = new BufferedWriter(fstream);
            out.write("My Name is Bobby");
            out.newLine();
            out.write("This is my text file.");                       
            out.flush();
            out.close();
        } 
   catch (IOException e) {
            e.getClass();
        }

}

答案 2 :(得分:0)

您使用的路径是相对于当前工作目录的。您当前的工作目录取决于您如何运行您的应用程序。我想这是MyEclipseProject。因此,您必须在项目下创建目录log(在srcbin目录所在的同一级别),然后在此目录中创建文件system.log。然后再试一次。我相信你的代码将开始工作。

在写入文件之前,它不会尝试打印new File("logs/system.log").getAbsolutePath()。它将显示系统期望查看文件的位置。

答案 3 :(得分:0)

在现代文件系统上创建文件路径时(至少,对于Windows,Mac和我熟悉的Linux版本都是如此),存在绝对路径并且存在相对路径。绝对路径是指通过文件系统直到您要查找的特定文件的路径,例如C:\Program Files\Application\application.exe。相对路径是(如所暗示的)相对于当前位置。

如果我使用'System.out.println(new File(“。”)。getAbsolutePath());'来运行main(),例如,我得到输出

C:\my-workspace\myproject\.

.代表当前目录。这就是为什么你可以用它来找到应该创建目录的地方。

如果找不到它,Java会创建该文件是正确的,但该目录的情况也是如此。您必须在运行代码之前或使用File#mkdir()方法在代码本身中创建目录。

答案 4 :(得分:0)

取决于你如何调用应用程序,但你应该在项目根目录中创建日志目录,你应该能够在那里写一个文件。

在打开流时,Java本身不会创建此目录。

您可能遇到权限问题。尝试:

System.out.println("can write: " + new File(./logs).canWrite());