0

そのため、ファイルを新しいファイルにコピーし、そのディレクトリを指定して (作成します)、stackoverflow で見つけたように、apache.commons のFiles.copy関数を使用して、ファイルをコピーする関数を実装したいと考えました。トリックを行います。

私の問題は次のとおりです。1つは機能し、もう1つは機能しない2つのコードを記述しますが、それらは非常に似ているため、違いを捉えられないようです...

最初のメソッドのコードは次のとおりです。

public static void copyToFile2 (String firmFolderName, String allFirmsFolderName, String copy_file_name, String copied_file_name) throws IOException {

        File from = new File(copied_file_name) ;
        String pathOfDirectoryOfToFile= "Folder/" + allFirmsFolderName +"/" + firmFolderName ; 
        //String pathOfDirectoryOfToFile = "Folder/fomrs/firm/" ;
        String pathOfToFile = pathOfDirectoryOfToFile + "/" + copy_file_name ; 

        (new File(pathOfDirectoryOfToFile)).mkdir();
        File to = new File(pathOfToFile) ;

        Files.copy( from.toPath(), to.toPath() );

    }

この例では、ディレクトリへのパスを偽造し、そのディレクトリを作成し、最終的にそこにコピー ファイルを作成するいくつかのパラメーターを指定する必要があります。それはNoSuchFileExceptionをスローし、ファイルが存在しないことはわかっていますが、それはいいかもしれないと思い、それ自体を作成しましたが、そうではなかったので、先に進みto.createNewFile();、確認するために to file インスタンス化の直後に追加しました。したがって、次のコードがあります。

(new File(pathOfDirectoryOfToFile)).mkdir();
File to = new File(pathOfToFile) ;
to.createNewFile();

Files.copy( from.toPath(), to.toPath() );

これで、指定されたアクセスパスが見つからないという IOException が発生しました。

2番目の方法:

public static void copyToFile1 (String firmFolderName, String allFirmsFolderName, String copy_file_name, String copied_file_name) throws IOException {

        File from = new File(copied_file_name) ;
        String pathOfDirectoryOfToFile= "Folder/" + allFirmsFolderName +"/" + firmFolderName +"/" ; 
        String pathOfToFile = pathOfDirectoryOfToFile + "/" + copy_file_name ; 

        (new File("Folder/mdjs55/")).mkdir();
        File to = new File("Folder/mdjs55/tm.jsp" ) ;


        Files.copy( from.toPath(), to.toPath() );

    }

これでうまくいきます。

それで、それは何ですか?私ができない唯一の違いは、copyToFile2 のパスが動的であり、2 番目の静的であることですが、それはどのように問題になるのでしょうか? 私が知っているのは、構築されている単なる文字列です...

PS : System.out.println(to.toPath()) を使用してそのパスをチェックアウトしましたが、うまく構築されています。

よろしくお願いします。

4

2 に答える 2

2

2 番目の例のパスは短くなっています。mkdir()は 1 つのサブディレクトリしか作成しないため、2 つのサブディレクトリに移動すると失敗し、そのディレクトリ内のファイルを使用しようとすると失敗します。

あなたが望むのはmkdirs()、必要に応じて複数レベルのディレクトリを作成することだと思います。

于 2013-05-13T09:52:16.660 に答える
0

これ

String pathOfDirectoryOfToFile= "Folder/" + allFirmsFolderName +"/" + firmFolderName +"/" ; 
String pathOfToFile = pathOfDirectoryOfToFile + "/" + copy_file_name ; 

不審に見える。それは生産します

"Folder/" + allFirmsFolderName +"/" + firmFolderName +"//" + copy_file_name ; 
于 2013-05-13T10:43:21.807 に答える