1

次のコードを使用して、ディレクトリを含むファイルを書き込む簡単なプログラムを作成しました。

 String nameProve = nameField.getText();

 String employee = ("C:\\Users\\ALLEN\\workspace32bit\\RETRIEVE_CHECKER1\\RETRIEVE_CHECKED1" + nameProve + ".txt");

 PrintWriter outputStream1 = null;
 try
 {
    outputStream1 = new PrintWriter(employeeName);
 }
 catch(Exception e)
 {
    JOptionPane.showMessageDialog(null, "Can not write to " + employeeName);
    System.exit(0);
 }

 outputStream1.println("Employee Retrieve Executed");
 outputStream1.close();

私はすでにコードを.jarファイルにエクスポートしており、プログラムを開発したコンピューターで実行すると、コードは正常に機能しますが、jarファイルを他のコンピューターにコピーし、forlderも作成しました(手動で) コード内のディレクトリに対応するプログラムが機能せず、catch ブロックに Can not write to "C:\Users\ALLEN\workspace32bit\RETRIEVE_CHECKER1\RETRIEVE_CHECKED1" + nameProve + ".txt" というメッセージが表示される

このエラーを解決する方法について誰かアドバイスをもらえますか? ありがとう!

4

2 に答える 2

0

明らかに、あなたはALLENマシンのユーザーであり、そのユーザーとしてプログラムを実行します。ディレクトリの所有者であるため、すべてが正常に機能しますC:\Users\ALLEN

次に、ユーザーが存在しない別のマシンにjarをコピーし、別のユーザーALLENとしてログインします。彼の名前をBobとしましょうC:\UsersBobユーザーウィンドウで、このアクションを完了するには管理者権限が必要であると警告されたため、そのディレクトリを作成しようとしたときに気付いたかもしれません。

Bobここで、自分のディレクトリにしかアクセスできないユーザーでプログラムを実行し、自分のディレクトリC:\Users\Bobに書き込もうとしますALLEN。それで何が起こるかというと、どちらが良いIOExceptionか教えてくれるということです。access denied

他のユーザーのプライベート ディレクトリに書き込もうとしないでください。これはセキュリティ上の問題です。

ファイルシステムを扱うときのコードでは、決して絶対パスをハードコードしないでください。常に相対パスを使用してください。または、プログラムに必要なすべてのデータを配置するディレクトリを定義する必要がある場合は、 ist を引数として渡します。

最も簡単な方法は、次を使用して、現在の作業ディレクトリで作業することです

String employee = "RETRIEVE_CHECKER1\\RETRIEVE_CHECKED1" + nameProve + ".txt";

RETRIEVE_CHECKER1プログラムを実行する場所に手動でディレクトリを作成するか、 File#mkdirを使用してプログラムでディレクトリを作成し、次のように使用する必要があります。

File employee = new File(dir, "RETRIEVE_CHECKED1" + nameProve + ".txt");
PrintWriter outputStream1 = new PrintWriter(employeeName);
于 2014-10-08T10:20:08.477 に答える