0

Java で renameTo() を使用してファイルをあるディレクトリから別のディレクトリに移動しようとしていますが、renameTo は機能しません (ファイルの名前を変更して移動しません)。基本的に、最初に同じファイル名でファイルを削除し、別のディレクトリからファイルを最初に削除したのと同じ場所にファイルをコピーしてから、同じ名前の新しいファイルをコピーします。

    //filePath = location of original file with file name appended. ex: C:\Dir\file.txt
    //tempPath = Location of file that I want to replace it to file file without the file name.  ex: C:\AnotherDir

    int pos = filePath.indexOf("C:\\Dir\\file.txt");
    //Parse out only the path, so just C:\\Dir
    String newFilePath = filePath.substring(0,pos-1);

    //I want to delete the original file
    File deletefile = new File(newFilePath,"file.txt");

    if (deletefile.exists()) {
        success = deletefile.delete();
    }


    //There is file already exists in the directory, but I am just appending .tmp at the end
    File newFile = new File(tempPath + "file.txt" + ".tmp");

    //Create original file again with same name.
    File oldFile = new File(newFilePath, "file.txt");

    success = oldFile.renameTo(newFile); // This doesnt work.

私が間違っていることを教えてもらえますか?

ご協力いただきありがとうございます。

4

2 に答える 2

5

文字列リテラルのバックスラッシュをエスケープする必要があります:"C:\\Dir\\file.txt"。または、を使用File.separatorしてパスを作成します。

さらに、newFileのパスが適切に構築されていることを確認してください。

File newFile = new File(tempPath + File.separator + "file.txt" + ".tmp");
                               //^^^^^^^^^^^^^^^^

投稿されたコード( )のコメントは、末尾にスラッシュ文字がない...ex: C:\AnotherDirことを示しています。tempPath

于 2012-09-27T19:41:23.110 に答える
0

ファイルを移動先ディレクトリに移動し、移動後、移動したファイルをソース フォルダから 3 つの方法で削除し、最後にプロジェクトで 3 番目のアプローチを使用しています。

最初のアプローチ:

File folder = new File("SourceDirectory_Path");
    File[] listOfFiles = folder.listFiles();
    for (int i = 0; i < listOfFiles.length; i++) {
    Files.move(Paths.get("SourceDirectory_Path"+listOfFiles[i].getName()), Paths.get("DestinationDerectory_Path"+listOfFiles[i].getName()));
    }
    System.out.println("SUCCESS");

2番目のアプローチ:

 Path sourceDir = Paths.get("SourceDirectory_Path");
    Path destinationDir = Paths.get("DestinationDerectory_Path");
      try(DirectoryStream<Path> directoryStream =   Files.newDirectoryStream(sourceDir)){
        for (Path path : directoryStream) {
            File d1 = sourceDir.resolve(path.getFileName()).toFile();
             File d2 = destinationDir.resolve(path.getFileName()).toFile(); 
             File oldFile = path.toFile();
            if(oldFile.renameTo(d2)){
                System.out.println("Moved");
            }else{
                System.out.println("Not Moved");
            }
        }
    }catch (Exception e) {
        e.printStackTrace();
    }

3番目のアプローチ:

Path sourceDirectory= Paths.get(SOURCE_FILE_PATH);
            Path destinationDirectory = Paths.get(SOURCE_FILE_MOVE_PATH);
            try (DirectoryStream<Path> directoryStream = Files.newDirectoryStream(sourceDirectory)) {
                for (Path path : directoryStream) {                                    
                    Path dpath = destinationDirectory .resolve(path.getFileName());                                    
                    Files.move(path, dpath, StandardCopyOption.REPLACE_EXISTING);
                }
            } catch (IOException ex) {
                ex.printStackTrace();   
            }

ハッピーコーディング!! :)

于 2015-08-21T06:28:35.437 に答える