檔案操作的一些疑問

weixin_33912246發表於2011-09-25

這些是自己零散的時間寫的,比較亂

合併兩個txt檔案

我們先來看看最簡單的使用合併流SequenceInputStream的方式進行操作

程式碼如下:

package File;

/**
 * 將兩個txt檔案合併為一個txt檔案
 * */
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.SequenceInputStream;

public class FileDemo436{
	public static void main(String[] args) throws IOException{
		File file1 = new File("d:" + File.separator + "hello1.txt");
		File file2 = new File("d:" + File.separator + "hello2.txt");
		File file3 = new File("d:" + File.separator + "hello3.txt");
		InputStream input1 = new FileInputStream(file1);
		InputStream input2 = new FileInputStream(file2);
		OutputStream output = new FileOutputStream(file3);
		SequenceInputStream se = new SequenceInputStream(input1, input2);
		int temp = 0;
		while((temp = se.read()) != -1){
			output.write(temp);
		}
		input1.close();
		input2.close();
		output.close();
		se.close();
	}
}

讀者可以自行測試,之後會發現在hello3.txt檔案中包含了之前兩個檔案的全部內容。

對於文字檔案完全正確,但是當我測試將上面的文字檔案改為word的時候卻出現錯誤,

筆者將上面程式碼部分的:

File file1 = new File("d:" + File.separator + "hello1.txt");
File file2 = new File("d:" + File.separator + "hello2.txt");
File file3 = new File("d:" + File.separator + "hello3.txt");

改為:

File file1 = new File("d:" + File.separator + "1.docx");
File file2 = new File("d:" + File.separator + "2.docx");
File file3 = new File("d:" + File.separator + "3.docx");

檔案1.docx中內容為11111,檔案2.docx中內容為22222

但是程式產生的3.docx當我開啟的時候出現:

當我單獨將上面的:

File file3 = new File("d:" + File.separator + "3.docx");

改為:

File file3 = new File("d:" + File.separator + "3.txt");

時候,產生的txt檔案內容為:

各種亂碼,我不太清楚為什麼錯,不知道那位大牛知道,麻煩指教一下.

但是一般才有jacob操作這類辦公軟體,我以後會給出專門一篇文章,舉例說明如何使用jacobjacob也就是java-com橋,你可以在http://sourceforge.net/projects/jacob-project/下載

 

上面的例子合併的是2txt檔案,但是有時候需要合併很多的txt檔案。

這個以合併3txt檔案為例子:

package File;

/**
 * 將兩個txt檔案合併為一個txt檔案
 * */
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.SequenceInputStream;
import java.util.Vector;

public class FileDemo436{
	public static void main(String[] args) throws IOException{
		File file1 = new File("d:" + File.separator + "1.txt");
		File file2 = new File("d:" + File.separator + "2.txt");
		File file3 = new File("d:" + File.separator + "3.txt");
		File file4 = new File("d:" + File.separator + "4.txt");
		Vector<InputStream> vec = new Vector<InputStream>();
		InputStream input1 = new FileInputStream(file1);
		InputStream input2 = new FileInputStream(file2);
		InputStream input3 = new FileInputStream(file3);
		vec.add(input1);
		vec.add(input2);
		vec.add(input3);
		OutputStream output = new FileOutputStream(file4);
		SequenceInputStream se = new SequenceInputStream(vec.elements());
		int temp = 0;
		while((temp = se.read()) != -1){
			output.write(temp);
		}
		input1.close();
		input2.close();
		output.close();
		se.close();
	}
}

執行結果:

驗證無誤。

依照上面的例子的思想,當需要合併多個檔案的時候,採用集合類將這些新增到集合中,最後使用合併流進行合併,當然也可以用最傳統的辦法,一個一個檔案的讀,邊讀邊寫。

 






相關文章