2016-09-14 4 views
0

Я сделал код ниже для копирования файла и его содержимого.BufferedReader не копирует файлы

static void copyFile(File inFile, String destination) { 
    if (inFile.isFile()) { 
     try { 
      String str = destination + "//" + inFile.getName(); 

      BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(inFile),"UTF-8")); 
      BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(str), false), "UTF-8")); 

      String line; 
      try { 
       while((line = br.readLine()) != null) { 
         bw.write(line); 
         System.out.println(line); 
       }     
      } catch (IOException ex) { 
        Logger.getLogger(JavaApplication10.class.getName()).log(Level.SEVERE, null, ex); 
      } 
     } catch (FileNotFoundException ex) { 
      Logger.getLogger(JavaApplication10.class.getName()).log(Level.SEVERE, null, ex); 
     } catch (UnsupportedEncodingException ex) { 
      Logger.getLogger(JavaApplication10.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } else if(inFile.isDirectory()) { 
     String str = destination + "\\" + inFile.getName(); 
     File newDir = new File(str); 
     newDir.mkdir(); 
     for(File file : inFile.listFiles()) 
      copyFile(file, newDir.getAbsolutePath()); 
    } 
} 

Код creaes файлы в месте назначения, как это следует, но .txt файлы пусты. Часть в то время цикла

bw.write(line); 

не работает

System.out.println(line); 

работы.

+0

когда вы делаете ReadLine() вы выбрасываете новые линии. Без флеш() или close() файла любые буферизированные данные не были записаны на диск (это цель буфера записи) –

ответ

1

Вам необходимо закрыть Writer, чтобы заставить его сбросить поток. это может быть сделано с помощью более новой попробовать с методом RESSOURCES (предпочтительно):

String str = destination + "//" + inFile.getName(); 
// note the paranthesis here, notfing that this is has to be closed after leaving the try block. 
try (
    BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(inFile), "UTF-8")); 
    BufferedWriter bw = new BufferedWriter(
      new OutputStreamWriter(new FileOutputStream(new File(str), false), "UTF-8"))) { 

    String line; 
    try { 
     while ((line = br.readLine()) != null) { 
      bw.write(line); 
      System.out.println(line); 
     } 
    } catch (IOException ex) { 
     ex.printStackTrace(); 
    } 
} catch (FileNotFoundException ex) { 
    ex.printStackTrace(); 

} catch (UnsupportedEncodingException ex) { 
    ex.printStackTrace(); 

} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

или используя наконец блок:

BufferedWriter bw = null; 
BufferedReader br = null; 
try { 
    String str = destination + "//" + inFile.getName(); 
    br = new BufferedReader(new InputStreamReader(new FileInputStream(inFile), "UTF-8")); 
    bw = new BufferedWriter(
      new OutputStreamWriter(new FileOutputStream(new File(str), false), "UTF-8")); 

    String line; 
    try { 
     while ((line = br.readLine()) != null) { 
      bw.write(line); 
      System.out.println(line); 
     } 
    } catch (IOException ex) { 
     ex.printStackTrace(); 
    } 
} catch (FileNotFoundException ex) { 
    ex.printStackTrace(); 

} catch (UnsupportedEncodingException ex) { 
    ex.printStackTrace(); 

} finally { 
    try { 
     if(bw != null) 
      bw.close(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    try { 
     if (br != null) 
      br.close(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

дополнительно либо IDE или компилятор должен предупредить вас о них не закрывается ,

0

Вы забыли вызов метода bw.flush() после записи законченного;

while((line = br.readLine()) != null){ 
     bw.write(line); 
     System.out.println( line); 
     }  
bw.flush(); 

Буферизованный метод запоминания вызова для запоминания;

0

Вы можете попробовать это

FileWriter fw = new FileWriter(inFile.getAbsoluteFile()); 
     BufferedWriter bw = new BufferedWriter(fw); 

      bw.write(line); 
Смежные вопросы