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 がファイルを見つけられない場合は、Java が作成するということでした。

(1) プロジェクトのルート ( )、(2)フォルダー、(3)パッケージ、(4) フォルダーの中logsに、空のファイルを含むフォルダーを配置しましたが、まったく同じエラーが発生します。 . 私は疑問に思っています: OS/パーミッションが進行中ですか? アプリがフォルダーとログ ファイルを作成しようとしているのに、Windows 7 によって許可が拒否されている可能性はありますか? もしそうなら、私は何をしますか?system.logMyEclipseProjectsrc/src/com.myprogram.utilsbin

そうでない場合、ターネーションのどこに配置しますlogs/system.logか???

これを明確にしていただきありがとうございます!

4

5 に答える 5

6

現在のディレクトリを確認するには、次の print ステートメントを追加します。

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

アプリケーションの呼び出し方法によって異なりますが、プロジェクト ルート内にログ ディレクトリを作成し、そこにファイルを書き込めるようにする必要があります。

ストリームを開くときに、Java 自体がこのディレクトリを作成することはありません。

権限に問題がある可能性があります。試す:

System.out.println("can write: " + new File(./logs).canWrite());
于 2011-08-17T15:47:15.197 に答える
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

使用しているパスは、現在の作業ディレクトリからの相対パスです。現在の作業ディレクトリは、アプリケーションの実行方法によって異なります。MyEclipseProjectだと思います。そのため、プロジェクトの下にディレクトリを作成し(とディレクトリがlogあるのと同じレベルに)、このディレクトリにファイルを作成する必要があります。その後、もう一度やり直してください。あなたのコードが機能し始めると思います。srcbinsystem.log

new File("logs/system.log").getAbsolutePath() ファイルに書き込む前に印刷しようとしません。システムがあなたのファイルを見ることを期待している場所が表示されます。

于 2011-08-17T15:18:15.990 に答える