黑马程序员技术交流社区
标题:
读文件不能识别中文
[打印本页]
作者:
stormdzh
时间:
2013-9-14 20:20
标题:
读文件不能识别中文
本帖最后由 杨增坤 于 2013-9-19 12:35 编辑
我弄了一个小代码,功能是读取文件里面的类容,可是为什么只可以显示英文,不能能识别中文呢,球指教!
<P>import java.io.*;
public class inputstreamtest
{
public static void main(String [] args)
{
String FileName=null;
InputStreamReader in=new InputStreamReader(System.in);
BufferedReader b=new BufferedReader(in);
byte [] buffer=new byte[100];
FileInputStream FileIn;
System.out.print("输入的文件名:");
try
{
FileName=b.readLine();</P>
<P> }
catch (IOException e)
{
System.out.print(e);
}</P>
<P> File file=new File(FileName);
if (file.exists())
{
try
{
FileIn=new FileInputStream(file);
while ((FileIn.read(buffer,0,1))!=-1)
{
System.out.print((char)buffer[0]);
//System.out.println((char)buffer[0]);
}
FileIn.close();</P>
<P> }
catch (IOException e1)
{
e1.printStackTrace();
}
}
else
System.out.println("文件不存在!");
}</P>
<P>
}
</P>
复制代码
文件及结果:
aaa.png
(12.21 KB, 下载次数: 33)
下载附件
2013-9-14 20:20 上传
bb.png
(12.71 KB, 下载次数: 27)
下载附件
2013-9-14 20:20 上传
作者:
Yuan先生
时间:
2013-9-14 20:54
乱码问题,设置一下统一的编解码
作者:
张文豪
时间:
2013-9-14 21:24
你把文件读取后存到Byte的数组中,“我”它的解码是-49 -44 。“是”它的解码是-54 -66 然后abc对应97、98、99。最后你输出语句的时候是-49转化成char字符输出对应的是? 下面同理,所以这就是为什么会输出????...的原因了
所以你要输出中文的话,要变成字符串形式的输出。下面是我在你的基础上改的代码。
import java.io.*;
class inputstreamtest
{
public static void main(String [] args)
{
String FileName=null;
InputStreamReader in=new InputStreamReader(System.in);
BufferedReader b=new BufferedReader(in);
String line = null;
FileInputStream FileIn;
BufferedReader bufis ;
System.out.print("输入的文件名:");
try
{
FileName=b.readLine();
}
catch (IOException e)
{
System.out.print(e);
}
File file=new File(FileName);
if (file.exists())
{
try
{
// FileIn=new FileInputStream(file);
bufis = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
// while ((FileIn.read(buffer,0,1))!=-1)
while((line = bufis.readLine())!=null)
{
System.out.println(line);
//System.out.println((char)buffer[0]);
}
bufis.close();
}
catch (IOException e1)
{
e1.printStackTrace();
}
}
else
System.out.println("文件不存在!");
}
}
<p> </p>
复制代码
作者:
罗凯健
时间:
2013-9-14 21:27
import java.io.*;
public class fileinputStreamTest
{
public static void main(String [] args)
{
String FileName=null;
InputStreamReader in=new InputStreamReader(System.in);
BufferedReader b=new BufferedReader(in);
BufferedReader FileIn;
String line =null;
System.out.print("输入的文件名:");
try
{
FileName=b.readLine();
}
catch (IOException e)
{
System.out.print(e);
}
File file=new File(FileName);
if (file.exists())
{
try
{
FileIn=new BufferedReader(new InputStreamReader(new FileInputStream(file),"GB2312"));
while ((line=FileIn.readLine())!=null)
{
System.out.println(line);
//System.out.println((char)buffer[0]);
}
FileIn.close();
}
catch (IOException e1)
{
e1.printStackTrace();
}
}
else
System.out.println("文件不存在!");
}
}
复制代码
基于你的代码的修改,假如需要用特定编码来解析,不妨试一下InputSreamReader。
你这里应该不是编码问题,我觉得是byte【】数组转换成char的时候出现问题,修改了一下,可以运行了。
有大牛解释一下就更好了
作者:
lizhangzhi
时间:
2013-9-14 22:09
import java.io.*;
public class inputstreamtest
{
public static void main(String [] args)
{
String FileName=null;
InputStreamReader in=new InputStreamReader(System.in);
BufferedReader b=new BufferedReader(in);
byte [] buffer=new byte[100];
FileInputStream FileIn;
System.out.print("输入的文件名:");
try
{
FileName=b.readLine();
}
catch (IOException e)
{
System.out.print(e);
}
File file=new File("F:\\",FileName);
if (file.exists())
{
try
{
FileIn=new FileInputStream(file);
while (( FileIn.read(buffer))!=-1)
{
System.out.print(new String(buffer));
//System.out.println((char)buffer[0]);
}
FileIn.close();
}
catch (IOException e1)
{
e1.printStackTrace();
}
}
else
System.out.println("文件不存在!");
}
}
复制代码
换成字符串输出就ok了
作者:
胡智
时间:
2013-9-14 22:19
一个中文是有两个字节码组成。
你用FileInputStream()读取文件数据,然后存入byte[]型数组里面。
读取的时候又一个字节一个字节的取,一个字节一个字节的打印输出。那计算机查表的时候找不到对应的字符编码,所以显式的是问号。
二楼已经说的很清楚了。
作者:
残影
时间:
2013-9-16 10:33
是不是字符编码问题?
作者:
stormdzh
时间:
2013-9-16 11:05
真心很感激各位的帮忙啊!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2