1

私はjava.nio.*ファイル操作に使用する1つのプロジェクトに取り組んでいます。基本的に私の製品はサーバー上で動作していますが、Java7を使用してサーバー上にファイルを作成しています。

Files.createFile(path)//For creating file.

でも削除したいときは

Files.delete(path)

それは私にメッセージを与えます

The process cannot access the file because it is being used by another process.**

ファイルコードを削除...。

Files.walkFileTree(start, new SimpleFileVisitor<Path>() {
            @Override
            public FileVisitResult visitFile(Path file,
                    BasicFileAttributes attrs) throws IOException {

                Files.delete(file);
                return FileVisitResult.CONTINUE;
            }

            @Override
            public FileVisitResult postVisitDirectory(Path dir, IOException e)
                    throws IOException {
                if (e == null) {
                     Files.delete(dir);
                    return FileVisitResult.CONTINUE;
                } else {
                    // directory iteration failed
                    throw e;
                }
            }

        });
4

4 に答える 4

4

自分のプロセスまたは別のプロセスによってロックされているファイルは削除できません。Windows ではファイルはデフォルトでロックされていますが、Linux では明示的にロックする必要があります。

この例

Path path = FileSystems.getDefault().getPath("test.log");
Path file = Files.createFile(path);
Files.delete(file);

エラーなしで実行されます

于 2012-07-26T13:12:05.690 に答える
0

ファイルを削除するには、ファイル ハンドラーを取得する必要があります (通常、ファイルを作成したスレッドが所有します)。したがって、あるスレッドがファイルを作成した場合、別のスレッドはそれを削除できません。

ファイルを削除するときに、サーバーが別のスレッドを作成していないことを確認してください。これは、各サーバー コードで発生します。

PS:より良い回答が必要な場合は、より多くの情報を提供する必要があります

于 2012-07-26T13:12:28.687 に答える
0

指定されたファイルへの参照を使用するライターをすべて閉じましたか?

于 2012-07-26T13:13:15.400 に答える
0

ファイルを開くためにスイング コンポーネントを使用している場合は、ファイルdispose()を開くそのコンポーネントのメソッドを使用できます。

于 2013-08-11T17:03:22.613 に答える