假定现有若干文本文件存放于一个目录中,内容为日文或中文或英文,现要将所有文件读入到一个文件中:
问题为,首先应该使用什么容器把所有文件的内容装入?其次,写出的文件为乱码,如何才能保证不管读的文件是什么编码格式,执行程序的平台为什么语言,写出来的文件内容都不乱码?
代码贴出来,大家帮看看。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();
}
}
}
问题为,首先应该使用什么容器把所有文件的内容装入?其次,写出的文件为乱码,如何才能保证不管读的文件是什么编码格式,执行程序的平台为什么语言,写出来的文件内容都不乱码?
代码贴出来,大家帮看看。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();
}
}
}
解决方案 »
- java底层
- 关于方法重载!!
- pccw 电讯盈科 的面试 通知!!!!刚 (求助 为养活家人需要这个工作)
- 急!!有一个数据集是String[]数组,其中有很多元素的内容是重复的,怎样新建一个数据集只保存其中不重复的记录。谢谢!!
- 有没有办法实现这样的需求?
- 怎样保护整个系统中的java类文件,有没有比较好用的混淆器或其它方法,加密狗?
- 这两个程序有什么区别?
- 有关JDBC 中 Output PreparedStatement 问题(小弟高分急求答案,在线等。)
- 使所有实现此接口(interface)的类拥有相同的构造器(contructor)?
- 我用JBuilder编写了一个Applet,在JB环境中可以运行正常,但,用IE打开却只显示一个灰色矩形,这是为何?
- 我这段代码哪里错了??
- 如何解决这个空NullPointerException?
在Win2K下,你可以指定文本文件打开的方式。
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(("C:\\aa\\result.doc"),"UTF8"));
bw.write(sb.toString());
doc文件不是普通的文本文件,是有特定格式的,并不是你给它一个扩展名就能具有word的功能。你在网上搜索一下有关rtf的、或者转doc的java包,应该可以找到答案。
兄弟给给出的方法似乎不可用啊,
FileOutputStream类没有两个参数的构造方法。To UnAgain():
即时写成txt的文件,也是乱码的。
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("C:\\aa\\result.doc"),"UTF8"));
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();
}
}
}现在不乱码了,但是有新的问题,就是会读出很多没用的空行,和空格,正在研究过滤方法,大家谁知道,快说说啊~ ^^
兄弟这次换的代码也不行,还是乱码。不过谢谢啊~
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[]时,将其长度指定为可以当前文件输入流中读取的字节数。这样就不会产生多余的空行和余白了。