假定现有若干文本文件存放于一个目录中,内容为日文或中文或英文,现要将所有文件读入到一个文件中:
问题为,首先应该使用什么容器把所有文件的内容装入?其次,写出的文件为乱码,如何才能保证不管读的文件是什么编码格式,执行程序的平台为什么语言,写出来的文件内容都不乱码?
代码贴出来,大家帮看看。import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
public class Test {
  public static void main(String[] args) {
    File dir = new File("C:\\aa");
    File[] fileArr = dir.listFiles();
    try{
      StringBuffer sb = new StringBuffer();
      for(int i=0;i<fileArr.length;i++ ){
        File fileFrom = fileArr[i];
        int bufferSize = 8192;
        FileReader fr=new FileReader(fileFrom);
        InputStreamReader isr = new InputStreamReader(new FileInputStream(fileFrom),"UTF-8");
       BufferedReader br=new BufferedReader(isr);
       char[] cArr = new char[bufferSize];
       int x =0;
       while ((x = fr.read(cArr)) != -1) {
         sb.append(cArr);
       }
       fr.close();
     }    FileWriter fw=new FileWriter("C:\\aa\\result.doc"); 
    BufferedWriter bw=new BufferedWriter(fw); 
    byte[] buffer = sb.toString().getBytes();
    for(int j=0;j<buffer.length;j++){
      bw.write(buffer[j]);
    }
    fw.flush();
    }catch(Exception e){
      e.printStackTrace();
    }
  }
}

解决方案 »

  1.   

    文件没有啥乱码不乱码的,你就正常写就行了,
    在Win2K下,你可以指定文本文件打开的方式。
      

  2.   


        BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(("C:\\aa\\result.doc"),"UTF8")); 
          bw.write(sb.toString());
      

  3.   


    doc文件不是普通的文本文件,是有特定格式的,并不是你给它一个扩展名就能具有word的功能。你在网上搜索一下有关rtf的、或者转doc的java包,应该可以找到答案。
      

  4.   

    To navence(卡西C):
    兄弟给给出的方法似乎不可用啊,
    FileOutputStream类没有两个参数的构造方法。To UnAgain():
    即时写成txt的文件,也是乱码的。
      

  5.   

    那要看是写成TXT文件是时候是不是uncode的,即是不是存成UTF-8
      

  6.   

    写错了~~鸟
    BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("C:\\aa\\result.doc"),"UTF8"));
      

  7.   

    public class Test {
    public static void main(String[] args) {
    File dir = new File("C:\\aa");
    File[] fileArr = dir.listFiles();
    List<String> contentList = new ArrayList<String>(); try{
    //read
    for(int i=0;i<fileArr.length;i++ ){
    File fileFrom = fileArr[i];
    int bufferSize = 8192;
    FileReader fr=new FileReader(fileFrom);
    char[] cArr = new char[bufferSize];
    int x =0;
    while ((x = fr.read(cArr)) != -1) {
    contentList.add(new String(cArr));
    }
    fr.close();
    } //writer
    FileOutputStream fw=new FileOutputStream("C:\\aa\\result.txt"); 
    for(int i=0;i<contentList.size();i++ ){
    byte[] buffer = contentList.get(i).getBytes();
    for(int j=0;j<buffer.length;j++){
    fw.write(buffer[j]);
    }
    }
    fw.flush(); }catch(Exception e){
    e.printStackTrace();
    }
    }
    }现在不乱码了,但是有新的问题,就是会读出很多没用的空行,和空格,正在研究过滤方法,大家谁知道,快说说啊~ ^^
      

  8.   

    To navence(卡西C):
    兄弟这次换的代码也不行,还是乱码。不过谢谢啊~
      

  9.   

    com.lowagie.text包有转rtf doc pdf 等格式的API
      

  10.   

    FileInputStream fis = new FileInputStream(fileFrom);
    byte[] bArr = new byte[fis.available()];
    int x =0;
    while ((x = fis.read(bArr)) != -1) {
    String line = new String(bArr);
    contentList.add(line);
    }
    fis.close();空行问题已经搞定,每次只要在生成byte[]时,将其长度指定为可以当前文件输入流中读取的字节数。这样就不会产生多余的空行和余白了。