2013-11-15 86 views
0

我想將textfile.txt的內容複製到使用Scanner Class的target.txt中。使用Scanner Class複製文件java

當我運行程序時,它確實創建了target.txt文件,但它沒有寫入它。

我可以使用FileInputStream並複製文件,但我想使用掃描儀類。

任何人都可以看到我做錯了什麼?

謝謝。

import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.OutputStream; 
import java.util.Scanner; 

public class ReadaFile { 

    public ReadaFile() throws IOException { 

     try { 

      File f1 = new File("textfile.txt"); 
      File f2 = new File("target.txt"); 

      Scanner in = new Scanner(f1); 
      OutputStream out = new FileOutputStream(f2); 

      byte buf[] = new byte[1024]; 
      int i = 0; 

      while (in.hasNextByte()) { 

       if (in.hasNextByte() && i < buf.length) { 
        buf[i] = in.nextByte(); 
        i++; 
       }else{ 
        out.write(buf, 0, i); 
        out.flush(); 
       } 

      } 

      in.close(); 
      out.close(); 

     } catch (FileNotFoundException e) { 
      e.getMessage(); 
     } 

    } 

    public static void main(String[] args) throws IOException { 
     new ReadaFile(); 

    } 

} 
+2

您使用的是Java 7嗎?然後使用'File.copy':http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html#copy%28java.nio.file.Path,%20java。 nio.file.Path,%20java.nio.file.CopyOption ...%29 –

+1

或者如果你不是,只需使用'FileInputStream'和'FileOutputStream'。使用'掃描儀'在這裏是一個奇怪的選擇。 –

回答

1

根本不需要使用緩衝陣列。你可以直接把它寫字節像這樣(爲你堅持使用掃描儀,因此該解決方案)

while (in.hasNext()) { 
    out.write(in.nextLine().getBytes()); 
    out.write("\n".getBytes()); // This will write an extra new line character at the end of all the data. 
    out.flush(); 
} 
+0

感謝R.J,我試過了你的建議,但仍然這樣做。它會創建target.txt文件,但不會寫入它。 – user2995057

+0

@ user2995057 - 我在我的系統中試過這段代碼,它工作正常。只是在那之後,我才把它作爲答案本身發佈。 – SudoRahul

+1

感謝R.J,對不起隊友我仍然有條件的循環(in.hasNextByte())我改變它(in.hasNext()),如你所建議,它的工作。 – user2995057

0

掃描儀被指定解析文本數據。所以它的nextByte和nextByte方法應該從文件中獲取數字並將它們轉換爲字節。 如果你想從文件中獲得文本,你可以使用FileReader。