2017-06-30 9 views
1

バッチ中にFiles.copyメソッドを使用してファイルをコピーしようとしています。実行するたびに、ファイルをコピーするのに異なる時間がかかります。私はまったく同じ12のファイルを毎回使用します。 30秒から30分まで変化します。 これはどのように可能ですか?Files.copyの速度が極端に変化しています

public void copyFile(File sourceFile, File targetFile, CopyOption... options) throws IOException { 
    Files.copy(sourceFile.toPath(), targetFile.toPath(), options); 
} 

オプションとして、私はStandardCopyOption.COPY_ATTRIBUTESを使用します。私はコードを使用するために使用される

http://stackoverflow.com/questions/106770/standard-concise-way-to-copy-a-file-in-javaで提案されているが、私はおそらくあなたが別のライブラリを使用して試すことができます

+2

どのような環境、ハードウェア、他のプログラムがディスクを使用していますか... ...?可能性は無限大。 – Kayaman

+0

私はWindows 10で作業しており、バッチでEclipse(バージョン:Mars.2リリース(4.5.2))を実行しています。ファイルは、サーバー上のあるディレクトリーから同じサーバー上の別のディレクトリーに移動されます。私は問題でもあるサーバーについて考えました。 奇妙なことは、ファイルをコピーするのにかかる時間が古い方法と一致していることです。 – Clara

+0

私は奇妙なパフォーマンスの動作を含む 'Files.copy'に関連するいくつかの質問を見ましたが、見つかった根本的な理由を覚えていません。あなたはSO上で他の質問を検索する必要があります(SO検索はしばしばパフォーマンスが悪いため、Googleを使用することをお勧めします)。 – Kayaman

答えて

0

のJava 7にアップグレードするので、それを変更したいですか?たとえばApacheのコモンズのための

 /** 
     * <dependency> 
     * <groupId>org.apache.commons</groupId> 
     * <artifactId>commons-io</artifactId> 
     * <version>1.3.2</version> 
     * </dependency> 
     **/ 
     private void fileCopyUsingApacheCommons() throws IOException { 
      File fileToCopy = new File("/tmp/test.txt"); 
      File newFile = new File("/tmp/testcopied.txt"); 

      File anotherFile = new File("/tmp/testcopied2.txt"); 

      FileUtils.copyFile(fileToCopy, newFile); 
     } 

またはちょうどのFileStreamを使用していますか?

private void fileCopyUsingFileStreams() throws IOException { 
     File fileToCopy = new File("/tmp/test.txt"); 
     FileInputStream input = new FileInputStream(fileToCopy); 

     File newFile = new File("/tmp/test_and_once_again.txt"); 
     FileOutputStream output = new FileOutputStream(newFile); 

     byte[] buf = new byte[1024]; 
     int bytesRead; 

     while ((bytesRead = input.read(buf)) > 0) { 
      output.write(buf, 0, bytesRead); 
     } 

     input.close(); 
     output.close(); 
    } 
+0

私は以前のコードでFileStreamを使用していましたが、うまくいきましたので、パフォーマンスの問題を解決できない場合はそれに固執すると思います。 私のプロジェクトのこのような小さな部分には他のライブラリを使用することは本当にありませんが、Apache Commonsを提案する人はたくさんいます。 – Clara

関連する問題