java 用FileInputStream中read方法读取文件出现乱码
用中间变量temp=is.read()后就会正常输出,反之就出现乱码packagecom.wepul.Exercise;importjava.io.File;import...
用中间变量temp=is.read()后就会正常输出,反之就出现乱码
package com.wepul.Exercise;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
public class Night_Test_Stream {
public static void main(String[] args) {
File f =new File("D://abc.txt");
byte b[] = new byte[(int) f.length()];
try {
int i =0;
// int temp=0;
InputStream is = new FileInputStream(f);
while(is.read()!=-1){
b[i]=(byte) is.read();
i++;
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(new String(b));
}
} 展开
package com.wepul.Exercise;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
public class Night_Test_Stream {
public static void main(String[] args) {
File f =new File("D://abc.txt");
byte b[] = new byte[(int) f.length()];
try {
int i =0;
// int temp=0;
InputStream is = new FileInputStream(f);
while(is.read()!=-1){
b[i]=(byte) is.read();
i++;
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(new String(b));
}
} 展开
展开全部
while(is.read()!=-1){
b[i]=(byte) is.read();
i++;
}
这里是错的,当判断is.read() != -1的时候这个字节就已经被读取了,于是b[i] = (byte) is.read();这里读取的就是后面一个字节,自然会乱码。解决方法如下:
byte c = (byte)is.read();
while(c != -1){
b[i] = c
i++;
c = (byte)is.read();
}
还有一种更方便的:
byte[] b = new byte[is.available()];
is.read(b);
展开全部
read方法读取的是字节流(每次读取一个字节),如果是中文,就是两个字节,就会出现乱码的。
可以通过BufferedReader 流的形式进行流缓存,之后通过readLine方法获取到缓存的内容。
BufferedReader bre = null;
try {
String file = "D:/test/test.txt";
bre = new BufferedReader(new FileReader(file));//此时获取到的bre就是整个文件的缓存流
while ((str = bre.readLine())!= null) // 判断最后一行不存在,为空结束循环
{
System.out.println(str);//原样输出读到的内容
};
备注: 流用完之后必须close掉,如上面的就应该是:bre.close(),否则bre流会一直存在,直到程序运行结束。
可以通过BufferedReader 流的形式进行流缓存,之后通过readLine方法获取到缓存的内容。
BufferedReader bre = null;
try {
String file = "D:/test/test.txt";
bre = new BufferedReader(new FileReader(file));//此时获取到的bre就是整个文件的缓存流
while ((str = bre.readLine())!= null) // 判断最后一行不存在,为空结束循环
{
System.out.println(str);//原样输出读到的内容
};
备注: 流用完之后必须close掉,如上面的就应该是:bre.close(),否则bre流会一直存在,直到程序运行结束。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
额,仔细看了下,你用int来接本来就不对。byte和int是不同的
byte是1字节,int是4字节。。。。
byte是1字节,int是4字节。。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询