這些是自己零散的時間寫的,比較亂
合併兩個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操作這類辦公軟體,我以後會給出專門一篇文章,舉例說明如何使用jacob。jacob也就是java-com橋,你可以在http://sourceforge.net/projects/jacob-project/下載
上面的例子合併的是2個txt檔案,但是有時候需要合併很多的txt檔案。
這個以合併3個txt檔案為例子:
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();
}
}
執行結果:
驗證無誤。
依照上面的例子的思想,當需要合併多個檔案的時候,採用集合類將這些新增到集合中,最後使用合併流進行合併,當然也可以用最傳統的辦法,一個一個檔案的讀,邊讀邊寫。