2011-08-17 72 views
3

我有巨大难以写入Java中的简单文本文件。我为IO异常所做的每一次搜索都提出了很多建议,但没有一个适用于这种情况。在Java中写入文件:找不到指定的路径

这里是我的项目结构:

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

我得到状态异常消息:日志\ SYSTEM.LOG(系统找不到指定的路径)

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

我现在已经置于logs文件夹 - 用空白system.log文件 - 内:(1)我的项目根(MyEclipseProject),(2)src/文件夹,(3)src/com.myprogram.utils包,和(4)bin文件夹,我得到相同的确切的错误。我想知道:我可以有一个操作系统/执行的事情吗?我的应用可能是,尝试使用来创建文件夹和日志文件,但Windows 7会拒绝这样做的权限?如果是这样,我该怎么办?!?!

如果不是,请问我在哪里放置logs/system.log ???

谢谢你对此的任何澄清!

+0

你在干什么? – Shawn

+0

你会尝试将文件名更改为system.log,并发布会发生什么? –

回答

6

要看看你是在哪个目录,添加下面的print语句:

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

这会告诉你,你应该创建logs目录。

+0

谢谢你的回应!我遵循你的建议,并找到了正确的目录来放置所有内容。*但是,我现在正面临一个单独的问题:每次运行我的程序时,都会创建一个新版本的日志文件;完全覆盖之前在其中的任何数据。为了使事情变得更加复杂,它使用空白(0字节)文件覆盖以前的文件 - 实际上没有记录。但我没有得到任何检查/未检查的例外....想法? – IAmYourFaja

+0

@Mara您需要使用append选项创建'FileWriter',以便它附加到文件而不是覆盖它。你写完之后还需要'flush()'和'close()'作者。 – dogbane

+0

@Mara另外,请使用'BufferedWriter'。查看File IO教程http://download.oracle.com/javase/tutorial/essential/io/file.html,了解写入文件的正确方法。 – dogbane

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

}

0

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

它在写入文件之前不会尝试打印new File("logs/system.log").getAbsolutePath()。它会告诉你系统希望看到你的文件的位置。

0

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

如果我运行main()与线 '的System.out.println(新文件()getAbsolutePath() “”);',例如,我得到的输出

C:\my-workspace\myproject\.

.代表当前目录。这就是为什么你可以使用它来找到应该在哪里创建目录。

如果Java无法找到该文件,那么它将创建该文件,但该目录与此不同。您必须在运行代码之前或使用File#mkdir()方法在代码本身中创建目录。

0

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

Java在打开流时不会自己创建该目录。

您可能有权限问题。试试:

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