你换一下,用GBK吧,应该文件的编码问题
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fis,"UTF-8"))就是这行代码不是吧,你连这都不知道
DataOutStream 是二进制的写,
这个"二进制",就是你所谓的乱码了。。。。
//二进制的读写,一般是对一个对象的读写,你这种用法很少很少
import javaioBufferedReader;
import javaioBufferedWriter;
import javaioDataInputStream;
import javaioDataOutputStream;
import javaioFileInputStream;
import javaioFileNotFoundException;
import javaioFileOutputStream;
import javaioFileReader;
import javaioFileWriter;
import javaioIOException;
import javaioInputStreamReader;
import javautilScanner;
class Student{ //二进制的读写,一般都是读写一个对象中的数据
String name;
int stuNo;
int num,chinese,math;
}
public class Maintest {
public void inputData() throws IOException{//增加数据
DataOutputStream dos=new DataOutputStream(new FileOutputStream("C:\\Documents and Settings\\Administrator\\桌面\\infotxt"));
DataInputStream dis=new DataInputStream(new FileInputStream("C:\\Documents and Settings\\Administrator\\桌面\\infotxt"));
Scanner sc=new Scanner(Systemin);
Student stu=new Student();
//输出学生信息保存在对象中
Systemoutprintln("输入1个学员的信息");
Systemoutprint("姓名:");
stuname=scnext();
Systemoutprintln("学号:");
stustuNo=scnextInt();
Systemoutprintln("chinese");
stuchinese=scnextInt();
Systemoutprintln("math");
stumath=scnextInt();
//将对象中的数据写入输出流中
doswriteUTF(stuname);
doswriteInt(stustuNo);
doswriteInt(stunum);
doswriteInt(stuchinese);
doswriteInt(stumath);
dosclose();
//从对象中读取
String readName=disreadUTF();
int readStuNo=disreadInt();
int readChinese=disreadInt();
int readMath=disreadInt();
Systemoutprintln(readName);
Systemoutprintln(readStuNo);
Systemoutprintln(readChinese);
Systemoutprintln(readMath);
disclose();
}
public static void main(String[] args) throws Exception {
Maintest mt=new Maintest();
mtinputData();
}
}汉字的字符集不匹配,比如说用UTF-8字符集去解析GBK字符集的汉字就会变成乱码
这里不要用FileReader,这个类用的是默认字符集去读取文本,改用InputStreamReader,它的构造方法中能够指定字符集,让它作为BufferedReader的源,就不会乱码了
hcl=new
BufferedReader(new
InputStreamReader(new
FileInputStream(wjlj
),
"GBK"));
如果还是乱码,就把GBK改成UTF-8
首先获得一个文件句柄。File file = new File(); file即为文件句柄。两人之间连通电话网络了。接下来可以开始打电话了。
通过这条线路读取甲方的信息:new FileInputStream(file) 目前这个信息已经读进来内存当中了。接下来需要解读成乙方可以理解的东西
既然你使用了FileInputStream()。那么对应的需要使用InputStreamReader()这个方法进行解读刚才装进来内存当中的数据
解读完成后要输出呀。那当然要转换成IO可以识别的数据呀。那就需要调用字节码读取的方法BufferedReader()。同时使用bufferedReader()的readline()方法读取txt文件中的每一行数据哈。
首先你要清楚,文本文件是用什么字符集编码的,编码和解码的字符集不兼容时一定会出错(是一定哦)。还得知道你的 *** 作系统默认的字符集。比如你的windows用的是gbk。
你新建一个文本文件1txt,打几个汉字保存,看它的大小是多少字节,记住这个数。这时的大小是用gbk编码的大小。
再打开这个文件,另存为,编码选择utf-8,覆盖这个文件,你能发现它比刚才大多了。因为编码集不一样了。
所以你用什么字符集编码就用什么字符集解码,这是任何情况下都应该遵守的。
别用你那个程序了。
InputStreamReader的构造方法是可以包含字符集的,像楼上说的那样,
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(你的文件名),文件的编码字符集)) 这个看api文档InputStreamReader的构造方法。
然后用brreadLine()读。
程序就不给你写了,很简单,就用这个方法。
再次强调,关于字符集只有两点好说的:
1不同字符集编出来的文件大小不等。
2文本文件的编码字符集和解码字符集要一致,否则一定会乱码。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)