黑马程序员技术交流社区
标题:
关于IO流。。。
[打印本页]
作者:
黑马任雪刚
时间:
2012-5-4 16:34
标题:
关于IO流。。。
import java.io.File;
import java.io.FileInputStream;
public class Test
{
String s="";
int i;
try
{
File file = new File("c:\demo.txt");
FileInputStream in = FileInputStream(file);
while(i=in.read()!=-1)
{
s=s+(char)i;
}
in.close();
}
catch(Exception e)
{
s="文件找不到";
}
System.out.println(s);
}
//以上的代码运行结果老是出现乱码,是怎么回事儿呀?
作者:
赵玮_Tom
时间:
2012-5-4 16:50
本帖最后由 赵玮_Tom 于 2012-5-4 16:53 编辑
好像没看到main方法。。。
而且, while(i=in.read()!=-1)
这种写法很难理解。。。
作者:
姚鑫
时间:
2012-5-4 16:51
FileInputStream中的public int read()方法
从此输入流中读取下一个数据字节。返回一个 0 到 255 范围内的 int 字节值。
如果是ASCII字符可以强转成char,因为是一个字节的。但汉字都是两个以上字节的不能转。
建议使用以下代码
public class FileInputStreamDemo {
03. public static void main(String[] args) throws IOException {
04. FileInputStream fis = new FileInputStream("demos.txt");
05. int num = fis.available();
06. byte[] buf = new byte[num];
07. fis.read(buf);
08. System.out.println(new String(buf));
09. }
10.}
复制代码
作者:
李月
时间:
2012-5-4 16:54
import java.io.File;
import java.io.FileInputStream;
public class Test
{
public static void main(String[] args)
{
String s="";
int i;
try
{
File file = new File("c:\demo.txt");
FileInputStream in = new FileInputStream(file);//
此处修改。
while((i=in.read())!=-1)//
此处修改
{
s=s+(char)i;
}
in.close();
}
catch(Exception e)
{
s="文件找不到";
}
System.out.println(s);
}
}
这样你试试。
作者:
郭振
时间:
2012-5-4 16:54
哥们你里边的问题不少,主要是没有主函数,你的代码我给你该好了,你看看吧!
package lianxiti;
import java.io.File;
import java.io.FileInputStream;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String s="";
int i;
try
{
File file = new File("c:\\demo.txt");
FileInputStream in = FileInputStream(file);
while((i=in.read())!=-1)
{
s=s+(char)i;
}
in.close();
}
catch(Exception e)
{
s="文件找不到";
}
System.out.println(s);
}
private static FileInputStream FileInputStream(File file) {
// TODO Auto-generated method stub
return null;
}
}
作者:
陈苓
时间:
2012-5-4 17:06
你读取的是文本文件所以使用字符流,字节流一般用于读取媒体文件,每次读取一个字节,字节流不涉及任何编码表的转换。直接将读取到的数据写到目的地。
而字符流会将数据写到缓冲区然后再进行查表。把FileOuputStream 改为FileReader
作者:
魏征
时间:
2012-5-4 17:27
本帖最后由 魏征 于 2012-5-4 20:03 编辑
我测试了一下,补上了需要修改的代码,运行时乱码的好像都是中文字,in.read()读入的是byte类型一个字节,然后在强制转换为int类型4个字节。一个英文母标点符号,但只占用了一个字节。而汉字占用了两个字节,所以当读入的字节为英文标点符号时,在编码表中查找返回相应的值,而汉字两个字节,所以当一个一个字节转化字符时编码表不能识别,所以返回的事相似的值。这就是为什么字符和标点符号都打印出来而汉字都是“?”。
所以当输入流的是纯文本的时候,使用FileReader类。应为此类中read()方法每次读入的是一个字符。试试下面的方法。
import java.io.File;
import java.io.FileReader;
public class Test
{
public static void main(String[] args)
{
String s="";
int i=0;
try
{
File file = new File("c:\\demo.txt");
FileReader in = new FileReader(file);//使用的字符输入流
while((i=in.read())!=-1)
{
s=s+(char)i;
}
in.close();
}
catch(Exception e)
{
s="文件找不到";
}
System.out.println(s);
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2