8

前回の投稿を無視して、問題の原因を見つけました。使っています

a.renameTo(b)

bが存在しない場合。それが存在しない理由は、シンボリックリンクがあるためです。したがって、bが/usr/name/folder/fileの場合、bは実際には/mnt/MountTestそのディレクトリへのシンボリックリンクであるためです。

したがって、問題は、文字列値を使用してJavaでファイルの名前を変更する別の方法はありますか?そうでない場合、この名前変更手順を別の方法で行うにはどうすればよいですか?

4

5 に答える 5

5

名前を変更すると、名前が変更されます...同じファイルシステム上にある場合。

renameTo()が失敗した場合は、それを新しい場所にコピーしてから、元の場所を削除する必要があります。

于 2010-01-06T17:19:06.497 に答える
5

ファイルの名前変更も、ファイルシステム全体で非常に問題があります。http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4073756を参照してください。バグレポートのコメント投稿者は、いくつかのサンプルコードを投稿し、Process.execを使用できることも指摘しました。Apache CommonsIOとGoogleGuavaの両方に、ファイルを安全に移動するためのユーティリティもあります。

于 2010-05-14T16:00:12.877 に答える
4

あなたは物事を混乱させていると思います。java.util.Fileは、一部のファイルシステム上のファイルを表していません。ファイルへのパスを表します。

于 2010-01-06T17:03:59.100 に答える
3

問題は、シンボリックリンクが関係しているということではありません。問題は、ファイルシステム間でアトミックに名前を変更できないことです。メタ問題は、Javaファイル操作が適切に設計されておらず、適切な例外をスローせず、何かが失敗したときにエラーコードを提供しないことです。

于 2010-01-06T16:52:46.493 に答える
1

どうですか:

a.renameTo(new File("/your/path/here/");
于 2010-01-06T16:53:42.397 に答える