@@ -418,7 +418,7 @@ public static void moveFileWithMD5Check(final File sourceFile, final File target
418418 final String sourceFileName = sourceFile .getName ();
419419 final File targetFile = new File (targetDir , sourceFileName );
420420 if (targetFile .exists ()) {
421- moveFile (sourceFile , targetFile );
421+ moveFile (sourceFile , targetDir );
422422 } else {
423423 org .apache .tsfile .external .commons .io .FileUtils .moveFileToDirectory (
424424 sourceFile , targetDir , true );
@@ -428,31 +428,37 @@ public static void moveFileWithMD5Check(final File sourceFile, final File target
428428 private static void moveFile (File sourceFile , File targetDir ) throws IOException {
429429 String sourceFileName = sourceFile .getName ();
430430 final File exitsFile = new File (targetDir , sourceFileName );
431- try (final FileInputStream is1 = new FileInputStream (sourceFile );
432- final FileInputStream is2 = new FileInputStream (exitsFile ); ) {
433- long sourceFileSize = is1 .getChannel ().size ();
434- long exitsFileSize = is2 .getChannel ().size ();
435- if (sourceFileSize != exitsFileSize ) {
436- File file = renameWithSize (sourceFile , sourceFileSize , targetDir );
437- if (!file .exists ()) {
438- moveFileRename (sourceFile , file );
439- return ;
440- }
441- }
442431
443- String sourceFileMD5 = DigestUtils .md5Hex (is1 );
444- String exitsFileMD5 = DigestUtils .md5Hex (is2 );
432+ // First check file sizes
433+ long sourceFileSize = sourceFile .length ();
434+ long existsFileSize = exitsFile .length ();
445435
446- if (sourceFileMD5 .equals (exitsFileMD5 )) {
447- org .apache .tsfile .external .commons .io .FileUtils .forceDelete (sourceFile );
448- LOGGER .info (
449- "Deleted the file {} because it already exists in the target directory: {}" ,
450- sourceFile .getName (),
451- targetDir .getAbsolutePath ());
452- } else {
453- File file = renameWithMD5 (sourceFile , sourceFileMD5 , targetDir );
436+ if (sourceFileSize != existsFileSize ) {
437+ File file = renameWithSize (sourceFile , sourceFileSize , targetDir );
438+ if (!file .exists ()) {
454439 moveFileRename (sourceFile , file );
455440 }
441+ return ;
442+ }
443+
444+ // If sizes are equal, check MD5
445+ String sourceFileMD5 ;
446+ String existsFileMD5 ;
447+ try (final FileInputStream is1 = new FileInputStream (sourceFile );
448+ final FileInputStream is2 = new FileInputStream (exitsFile ); ) {
449+ sourceFileMD5 = DigestUtils .md5Hex (is1 );
450+ existsFileMD5 = DigestUtils .md5Hex (is2 );
451+ }
452+
453+ if (sourceFileMD5 .equals (existsFileMD5 )) {
454+ org .apache .tsfile .external .commons .io .FileUtils .forceDelete (sourceFile );
455+ LOGGER .info (
456+ "Deleted the file {} because it already exists in the target directory: {}" ,
457+ sourceFile .getName (),
458+ targetDir .getAbsolutePath ());
459+ } else {
460+ File file = renameWithMD5 (sourceFile , sourceFileMD5 , targetDir );
461+ moveFileRename (sourceFile , file );
456462 }
457463 }
458464
@@ -492,27 +498,35 @@ private static void copyFileWithMD5(final File sourceFile, final File targetDir)
492498 throws IOException {
493499 String sourceFileName = sourceFile .getName ();
494500 final File exitsFile = new File (targetDir , sourceFileName );
495- try (final FileInputStream is1 = new FileInputStream (sourceFile );
496- final FileInputStream is2 = new FileInputStream (exitsFile ); ) {
497- long sourceFileSize = is1 .getChannel ().size ();
498- long exitsFileSize = is2 .getChannel ().size ();
499- if (sourceFileSize != exitsFileSize ) {
500- File file = renameWithSize (sourceFile , sourceFileSize , targetDir );
501- if (!file .exists ()) {
502- copyFileRename (sourceFile , file );
503- return ;
504- }
505- }
506- String sourceFileMD5 = DigestUtils .md5Hex (is1 );
507- String exitsFileMD5 = DigestUtils .md5Hex (is2 );
508- if (sourceFileMD5 .equals (exitsFileMD5 )) {
509- return ;
510- }
511501
512- File file = renameWithMD5 (sourceFile , sourceFileMD5 , targetDir );
502+ // First check file sizes
503+ long sourceFileSize = sourceFile .length ();
504+ long exitsFileSize = exitsFile .length ();
505+
506+ if (sourceFileSize != exitsFileSize ) {
507+ File file = renameWithSize (sourceFile , sourceFileSize , targetDir );
513508 if (!file .exists ()) {
514509 copyFileRename (sourceFile , file );
515510 }
511+ return ;
512+ }
513+
514+ // If sizes are equal, check MD5
515+ String sourceFileMD5 ;
516+ String exitsFileMD5 ;
517+ try (final FileInputStream is1 = new FileInputStream (sourceFile );
518+ final FileInputStream is2 = new FileInputStream (exitsFile ); ) {
519+ sourceFileMD5 = DigestUtils .md5Hex (is1 );
520+ exitsFileMD5 = DigestUtils .md5Hex (is2 );
521+ }
522+
523+ if (sourceFileMD5 .equals (exitsFileMD5 )) {
524+ return ;
525+ }
526+
527+ File file = renameWithMD5 (sourceFile , sourceFileMD5 , targetDir );
528+ if (!file .exists ()) {
529+ copyFileRename (sourceFile , file );
516530 }
517531 }
518532
0 commit comments