2015-01-05 4 views
1

Мне нужно переместить файлы из одного каталога в другой каталог.Перемещение больших файлов в java

Am используя файл свойств. Таким образом, путь источника и назначения сохраняется в файле свойств. Am haivng класс считывания свойств также.

В моем исходном каталоге есть много файлов. Один файл должен перейти в другой каталог, если он завершит операцию.

Размер файла более 500 МБ.

import java.io.File; 
import java.nio.file.Files; 
import java.nio.file.StandardCopyOption; 

import static java.nio.file.StandardCopyOption.*; 


public class Main1 
{ 

    public static String primarydir=""; 
    public static String secondarydir=""; 

    public static void main(String[] argv) 
    throws Exception 
    { 

     primarydir=PropertyReader.getProperty("primarydir"); 
     System.out.println(primarydir); 

     secondarydir=PropertyReader.getProperty("secondarydir"); 

     File dir = new File(primarydir); 

     secondarydir=PropertyReader.getProperty("secondarydir"); 


     String[] children = dir.list(); 
     if (children == null) 
     { 
      System.out.println("does not exist or is not a directory"); 
     } 
     else 
     { 
      for (int i = 0; i < children.length; i++) 
      { 
       String filename = children[i]; 
       System.out.println(filename); 

       try 
       { 
        File oldFile = new File(primarydir,children[i]); 

        System.out.println("Before Moving"+oldFile.getName()); 

        if (oldFile.renameTo(new File(secondarydir+oldFile.getName()))) 
        { 
         System.out.println("The file was moved successfully to the new folder"); 
        } 
        else 
        { 
         System.out.println("The File was not moved."); 
        } 
       } 
       catch (Exception e) 
       { 
        e.printStackTrace(); 
       } 
      } 
      System.out.println("ok"); 
     } 
    } 

} 

Мой код не перемещает файл на правильный путь.

Это моя собственность файл

primarydir=C:/Desktop/A 
secondarydir=D:/B 
enter code here 

Файлы должны быть в B диске. Как сделать? Любой может мне помочь .. !!

+0

'FileChannel.transferTo()' может быть то, что вам нужно. –

+1

Я думаю, что ваши каталоги должны заканчиваться на '' \ ''. Таким образом, 'dir + file.getName()' даст допустимый путь. –

+0

В коде, который вы указали, убедитесь, что seconddir заканчивается символом '\'. Нет необходимости в этом в случае первичной передачи. – robin

ответ

4

Изменить это:

oldFile.renameTo(new File(secondarydir+oldFile.getName())) 

Для этого:

oldFile.renameTo(new File(secondarydir, oldFile.getName())) 

Это лучше не использовать конкатенацию присоединиться сегментов пути, как правильный способ сделать это может зависеть от платформы.

Edit: Если вы можете использовать JDK 1.7 API, вы можете использовать Files.move() вместо File.renameTo()

+0

Спасибо .. он работает – afu

0

код - метод Java:

/** 
* copy by transfer, use this for cross partition copy, 
* @param sFile source file, 
* @param tFile target file, 
* @throws IOException 
*/ 
public static void copyByTransfer(File sFile, File tFile) throws IOException { 
    FileInputStream fInput = new FileInputStream(sFile); 
    FileOutputStream fOutput = new FileOutputStream(tFile); 
    FileChannel fReadChannel = fInput.getChannel(); 
    FileChannel fWriteChannel = fOutput.getChannel(); 

    fReadChannel.transferTo(0, fReadChannel.size(), fWriteChannel); 

    fReadChannel.close(); 
    fWriteChannel.close(); 
    fInput.close(); 
    fOutput.close(); 
} 

Использование метода NiO, он делает операцию использование ОС сошки для повышения производительности.


Вот код импорта:

import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.nio.ByteBuffer; 
import java.nio.channels.FileChannel; 

Если вы находитесь в затмении, просто использовать ctrl + shift + o.

+1

Вы * можете * хотеть включать операторы 'import'. –

Смежные вопросы