从一个文档读出文字再写入另一个文档,在控制台显示中文时是乱码,但写出文件是正确的,怎样修改呢?
/*
* 从一个txt文档读取文字再写入另一个文档
*/
import java.io.*;public class inout {
public static void main(String args[]) {
try{
int b;
//byte []a = new byte[100];
FileInputStream in = new FileInputStream("g:\\yufa.txt");
FileOutputStream ou = new FileOutputStream("g:\\out.txt");
while((b=in.read())!=-1){
System.out.print((char)b);
ou.write(b);
//String sh = new String();
}
}catch(IOException e){
System.out.println(e.getMessage());
}
}
}
/*
* 从一个txt文档读取文字再写入另一个文档
*/
import java.io.*;public class inout {
public static void main(String args[]) {
try{
int b;
//byte []a = new byte[100];
FileInputStream in = new FileInputStream("g:\\yufa.txt");
FileOutputStream ou = new FileOutputStream("g:\\out.txt");
while((b=in.read())!=-1){
System.out.print((char)b);
ou.write(b);
//String sh = new String();
}
}catch(IOException e){
System.out.println(e.getMessage());
}
}
}
第一,你没有考虑到编码问题,你的程序读出来一个int,然后就转成char是不行的。可以考虑使用BufferedReader的readLine来读取字符串,然后再转换成合适的编码。第二,就是和其它程序的乱码一个原因,所使用的非Unicode语言不是系统的默认非Unicode语言
package mytest;import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;public class FileCopy {
public static void main(String[] args)throws IOException{
File file=new File("D:/soursefile.txt");
FileReader f=new FileReader(file);
FileWriter fout=new FileWriter("D:/targetfile.txt");
int n=(int)file.length();
System.out.println(n);
for(int i=0;i<n;i++){
fout.write(f.read());
}
f.close();
fout.flush();
fout.close();
}
}
InputStreamReader reader = new InputStreamReader (in,"GBK"); // 用这个方法读取,并指定编码
{
public static void main(String[] args) throws Exception
{
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("in.txt"),"GB2312"));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("out.txt"),"GB2312"));
String data = null;
while((data = br.readLine())!=null)
{
System.out.println(data);
// System.out.println(new String(data.getBytes("GBK")));
bw.write(data);
bw.newLine();
}
br.close();
bw.close();
}
}
构造InputStreamReader、OutputStreamWriter的时候都可以指定文件编码啊,
控制台打印输出的时候中文系统下的JVM用的是GBK,转不转都无所谓,其他么转一下就OK了。
我的16进制unicode编码为6211
转换为2进制是 0110 0010 0001 0001
转换为10进制为2^14+2^13+2^9+2^4+2^0=1+16+512+8192+16384=25105
System.out.print(char(25105));
打印出来刚好就是 我修改下一楼的程序,读入一个只有 我 一个字的.txt文件
while((b=in.read())!=-1){
//在这儿加一行
System.out.print(b+" ");
System.out.println((char)b);
ou.write(b);
}
结果会出现两个200+的数字;因为汉字是两个字节,而程序每次取了一个字节,
我想这个两个数据的二进制形式,一定和0110 0010 0001 0001 存在这一种对应关系
我观察了一下 但是没有找到具体的转换生成方式。 留给诸位继续奋斗。
int b;
FileInputStream in = new FileInputStream("e:\\a.txt");
FileOutputStream ou = new FileOutputStream("e:\\b.txt");
InputStreamReader reader = new InputStreamReader(in,"gbk");
OutputStreamWriter writer = new OutputStreamWriter(ou,"gbk");
while((b=reader.read())!=-1){
System.out.print((char)b);
writer.write(b);
}
writer.flush();
}catch(IOException e){
System.out.println(e.getMessage());
}
System.out.print((char)b); 这行?这个变量b是b=in.read(),in.read()的返回值是int型,读取的字节数量,不是读取的内容
String b;
FileInputStream in = new FileInputStream("d:\\abc.txt");
FileOutputStream ou = new FileOutputStream("d:\\out.txt");
PrintStream p=new PrintStream(ou);
BufferedReader sb = new BufferedReader(new FileReader(new File("d:\\abc.txt")));
while ((b = sb.readLine()) != null) {
System.out.println(b);
b += "\n";
ou.write(b.getBytes());
}
} catch (IOException e) {
System.out.println(e.getMessage());
}
经过测试,控制台和写入文件都正常
想都不要想
请使用 FileReader 和 FileWriter
这句话不对的,,,b不是读取的字节数量,而是读入的字节, int 4个字节, 只在低8位存,高24忽略 int data;
while((data=System.in.read())!=-1)
System.out.println(data);
//输入a 输出97 ; 输入“我”输出 206 210如果用System.out.write(data); //这时输入什么打印什么 输入“我”打印我这里pirnt方法和 write方法的区别,,一个是打印整数,一个是把字节写入输出流。
BufferedReader br = new BufferedReader(new InputStreamReader(
new FileInputStream(this.inFilename),"GB2312"));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(this.outFilename),"GB2312"));
String data = null;
while ((data = br.readLine()) != null) {
System.out.println(data);
bw.write(data);
bw.newLine();
}
br.close();
bw.close();
这样Consol和输出文件都正常输出,日文的:
/**案件番号 */
String anKenNumber ;
/**案件枝番号 */
String anKenEdaNumber;
/**案件区分 */
Boolean anKenKubun;
/**ロン */
int loan;