3

我在用 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 (The system cannot find the path specified)

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

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

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

感谢您对此的澄清!

4

5 回答 5

6

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

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

这将告诉您应该在哪里创建logs目录。

于 2011-08-17T15:08:55.337 回答
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();
        }

}

于 2011-08-17T15:08:48.080 回答
0

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

new File("logs/system.log").getAbsolutePath() 它在写入文件之前不会尝试打印。它将向您显示系统希望在哪里看到您的文件。

于 2011-08-17T15:18:15.990 回答
0

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

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

C:\my-workspace\myproject\.

.代表当前目录。这就是为什么您可以使用它来查找应该创建目录的位置。

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

于 2011-08-17T15:40:00.700 回答
0

取决于您如何调用应用程序,但您应该在项目根目录中创建日志目录,并且您应该能够在其中写入文件。

Java 在打开流期间不会自行创建此目录。

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

System.out.println("can write: " + new File(./logs).canWrite());
于 2011-08-17T15:47:15.197 回答