黑马程序员技术交流社区
标题:
复习到io流遇到一大堆问题,想的脑子都大了
[打印本页]
作者:
魏亮
时间:
2012-10-12 16:28
标题:
复习到io流遇到一大堆问题,想的脑子都大了
<P>import java.io.*;
class FileStream
{
public static void main(String[] args)
{
read_2();
//read_1();
//write();
}
public static void read_2()
{
FileInputStream fis = null;
try
{
fis = new FileInputStream("FileStreamDemo.txt");
int ch =0;
while((ch = fis.read())!=-1)
{
System.out.println(ch);\<FONT color=red>\打印出一串数字,如果加char 强转是一串问号
</FONT> }
}
catch (IOException e)
{
System.out.println(e.toString());
}
finally
{
if (fis!=null)
{
try
{
fis.close();
}
catch (IOException e)
{
System.out.println("close failed");
}
}
}
}
public static void read_1()
{
FileInputStream fis = null;
try
{
fis = new FileInputStream("FileStreamDemo.txt");//FileStreamDemo.txt 这个文件里边写的是中文
int len =0;
byte[] b = new byte[1024];
while((len=fis.read(b))!=-1)
{
System.out.println(new String(b,0,len));\<FONT color=red>\可以打印出中文,这个为什么可以打印出中文??b里边装的不也是单个的字节吗? 既然是字节打印结果应该和上面那个方法的打印结果一样呀??为什么这个能打出中文,上面的却是数字??
</FONT> }
}
catch (IOException e)
{
System.out.println(e.toString());
}
finally
{
if (fis!=null)
{
try
{
fis.close();
}
catch (IOException e)
{
System.out.println(e.toString());
}
}
}
}
public static void write()
{
FileOutputStream fos = null;
try
{
fos = new FileOutputStream("FileStreamDemo.txt");
fos.write("谁在天堂".getBytes());
}
catch (IOException e)
{
System.out.println("catch"+"写入失败 ");
}
finally
{
if(fos!=null)
try
{
fos.close();
}
catch (Exception e)
{
System.out.println(e.toString());
}
}
}
}</P>
复制代码
作者:
郑彬
时间:
2012-10-13 10:57
new String(b,0,len)),自动将字节数组用系统默认的编码表进行编码了,所以会看到中文。
问号的出现是因为系统不能识别字节码,无法对字节码进行编码。
作者:
赵永康
时间:
2012-10-13 22:59
这应该涉及到字符编码的问题了 inputSream的read方法读取到的是一个字节,你一个个字节的读,然后再往出打,肯定不行的!因为,一个中文是两个字节!就相当于你把中文字拆开了,然后往出打的时候,按照默认的jbk编码表,肯定编译不了!至于你第下面的read(数组)方法,就对了 因为你的字节数组足够的大 可以装下你所读到的数据!编译的时候就没问题!第一个问题的解决方案就是:你可以定义一个Stringbiulder,将每一次读到的数据添加其中,然后再一次性的转换成字符串,在进行打印!
作者:
王小闲7
时间:
2012-10-25 11:13
FileReader fr=new FileReader("FileStreamDemo.txt");
int ch =0;
char c;
StringBuilder sb=new StringBuilder();
// fr.read()
while((ch = fr.read())!=-1)
{
c=(char) ch;
sb.append(c);
// System.out.println(c);//\<FONT color=red>\打印出一串数字,如果加char 强转是一串问号
}
String s=new String(sb);
System.out.println(s);
复制代码
用FileReader类字符流来读取就可以了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2