我想把“明朝的那些事儿.txt”这个文件分成若干个小文件,代码如下,不过这个代码生成的小文件打开之后是乱码,我用的是Winddows操作系统,明朝的那些事儿.txt 的编码方式是GB2312,我知道是BufferedWriter的默认编码方式UTF-8造成的错误,但不知道如何作改,请教高手,帮我修改一下,谢谢
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException; /**
* @author ht
* 预处理
*
*/
public class FilePreprocess {
public static void main(String[] arg){
String outputpath = "D:\\test\\small\\";//小文件存放路径
String filename = "D:\\test\\明朝的那些事儿.txt";//原文件存放路径
if(!new File(outputpath).exists()){
new File(outputpath).mkdirs();
}
splitToSmallFiles(new File(filename), outputpath);
}
/**大文件切割为小的
* @param file
* @param outputpath
*/
public static void splitToSmallFiles(File file ,String outputpath){
int filePointer = 0;
int MAX_SIZE = 10240;
String filename = "output";
BufferedWriter writer = null;
try {
BufferedReader reader = new BufferedReader(new FileReader(file));
StringBuffer buffer = new StringBuffer();
String line = reader.readLine();
while(line != null){
buffer.append(line).append("\r\n");
if(buffer.toString().getBytes().length>=MAX_SIZE){
writer = new BufferedWriter(new FileWriter(outputpath+filename+filePointer+".txt"));
writer.write(buffer.toString());
writer.close();
filePointer++;
buffer=new StringBuffer();
}
line = reader.readLine();
}
writer = new BufferedWriter(new FileWriter(outputpath+filename+filePointer+".txt"));
writer.write(buffer.toString());
writer.close();
System.out.println("The file hava splited to small files !");
} catch (FileNotFoundException e) {
System.out.println("file not found !");
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException; /**
* @author ht
* 预处理
*
*/
public class FilePreprocess {
public static void main(String[] arg){
String outputpath = "D:\\test\\small\\";//小文件存放路径
String filename = "D:\\test\\明朝的那些事儿.txt";//原文件存放路径
if(!new File(outputpath).exists()){
new File(outputpath).mkdirs();
}
splitToSmallFiles(new File(filename), outputpath);
}
/**大文件切割为小的
* @param file
* @param outputpath
*/
public static void splitToSmallFiles(File file ,String outputpath){
int filePointer = 0;
int MAX_SIZE = 10240;
String filename = "output";
BufferedWriter writer = null;
try {
BufferedReader reader = new BufferedReader(new FileReader(file));
StringBuffer buffer = new StringBuffer();
String line = reader.readLine();
while(line != null){
buffer.append(line).append("\r\n");
if(buffer.toString().getBytes().length>=MAX_SIZE){
writer = new BufferedWriter(new FileWriter(outputpath+filename+filePointer+".txt"));
writer.write(buffer.toString());
writer.close();
filePointer++;
buffer=new StringBuffer();
}
line = reader.readLine();
}
writer = new BufferedWriter(new FileWriter(outputpath+filename+filePointer+".txt"));
writer.write(buffer.toString());
writer.close();
System.out.println("The file hava splited to small files !");
} catch (FileNotFoundException e) {
System.out.println("file not found !");
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
解决方案 »
- 问大家一个问题,具体描述如详细内容
- 请问用jmap -heap查到的大小与top查java进程占用的res内存为什么不相同?
- 初学JAVA的两个基础问题
- 怎么将数据写入一个xml文档??
- 很不解的一个问题(解决立即给分)
- 问一个关于编程格式的问题
- 如何通过正则表达式将select t1.c1,t2.c2 from table1 t1 中select 与 from之间的字符串提取出来或换成其他字符串?
- 请 peacock_king(孔雀王)等参与讨论“读取配置文件的方法”的朋友进来一下。
- 在Jbuilder里面怎样调用exe的文件?
- Iterator接口有什么用?
- 新手写记事本
- 线程的执行顺序问题?
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "GB2312");
写用new OutputStreamWriter(.., "GB2312").
writer = new BufferedWriter(new FileWriter(outputpath+filename+filePointer+".txt"),"GB2312");
把输入输出流改编码
package test.io;import java.io.*;public class FilePreprocess {
public static void main(String[] arg){
String outputpath = "D:\\test\\small\\";//小文件存放路径
String filename = "D:\\test\\明朝的那些事儿.txt";//原文件存放路径
if(!new File(outputpath).exists()){
new File(outputpath).mkdirs();
}
splitToSmallFiles(new File(filename), outputpath);
} public static void splitToSmallFiles(File file ,String outputpath){
int filePointer = 0;
int MAX_SIZE = 10240;
String filename = "output";
PrintWriter writer = null;
try {
BufferedReader reader = new BufferedReader(new FileReader(file));
StringBuffer buffer = new StringBuffer();
String line = reader.readLine();
while(line != null){
buffer.append(line).append("\r\n");
if(buffer.toString().getBytes().length>=MAX_SIZE){
//writer = new BufferedWriter(new FileWriter(outputpath+filename+filePointer+".txt"));
writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(filename), "gb2312"));
writer.write(buffer.toString());
writer.close();
filePointer++;
buffer=new StringBuffer();
}
line = reader.readLine();
}
//writer = new BufferedWriter(new FileWriter(outputpath+filename+filePointer+".txt"));
writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(filename), "gb2312"));
writer.write(buffer.toString());
writer.close();
System.out.println("The file hava splited to small files !");
} catch (FileNotFoundException e) {
System.out.println("file not found !");
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
} 老师说了,java io就是套管子,Reader/Writer套InputStreamReader/OutputStreamWriter套InputStream/OutputStream,
InputStreamReader/OutputStreamWriter实现了字节流/字符流的转换, 可以设编码。
FileWriter writer = null;
try {
FileReader reader =new FileReader(file);
试试