4

FilesJava 7 と新しいクラスに慣れてきました。

ある時点でファイルの内容を置き換える必要がある小さなアプリケーションを作成しています。何か問題が発生した場合にターゲット ファイルが消去されないように、一時ファイルを使用しました。AccessDeniedExceptionただし、実際のコピーを実行すると、常にエラーが発生します。

これが私のコードです:

// Temporary file generation.
Path target = getCurrentConfigFile(); // Returns a path, works ok.
Path tempFile = Files.createTempFile("tempfile", null);
Files.write(tempFile, conf.getBytes(Charset.defaultCharset()), StandardOpenOption.WRITE);

// Actual copy.
Files.copy(tempFile, target, StandardCopyOption.REPLACE_EXISTING);

// Cleanup.
Files.delete(tempFile);

getCurrentConfigFile()ターゲット ファイルのパス作成を処理します。

(... generates various strings from configuration parameters)
return FileSystems.getDefault().getPath(all, these, various, strings);

コードを実行すると、.batスクリプトを介して実行され、標準のコマンド プロンプトまたは昇格の両方でエラーが発生します。ターゲット ファイルはC:\temp\tests、同じ Windows ユーザーで作成したディレクトリにあります。

ターゲットへの直接書き込みが機能するため、問題は一時ファイルからの読み取りにあるようです。次はどこを見ればいいですか?

4

1 に答える 1

2

答えではありませんが、コメントするには長すぎます。以下のコードを (Windows 7 のコマンド ラインから) 実行すると、期待どおりに動作します。

public static void main(String[] args) throws IOException {
    Path target = Paths.get("C:/temp/test.txt"); // Returns a path, works ok.
    Path tempFile = Files.createTempFile("tempfile", null);
    Files.write(tempFile, "abc".getBytes(UTF_8), StandardOpenOption.WRITE);

    // Actual copy.
    Files.copy(tempFile, target, StandardCopyOption.REPLACE_EXISTING);

    // Cleanup.
    Files.delete(tempFile);
}

あなたの問題はそのコードにはありません。コード内の別の場所にあるか、使用しているファイル/フォルダーのアクセス許可が原因である可能性があります。

于 2014-04-01T08:38:48.517 に答える