小弟开始学java,今天在做文件输入输出测试的时候遇到个问题,希望各位大大帮个忙。
主要程序如下:
{ //创建文件输入流对象
FileInputStream rf = new FileInputStream("Test.txt");
int n=512;
byte buffer[] = new byte[n];
while ((rf.read(buffer,0,n)!=-1) && (n>0)) //读取输入流
{
String bu = new String(buffer);
System.out.println(bu);
for(int i=0;i<bu.length();i++){
// if(buffer[i]>0)
System.out.print(" "+buffer[i]);
}
}
System.out.println();
rf.close(); //关闭输入流
}
我Test.txt里内容是:
this is a
test file
可是我运行后输出结果却是:
锘縯his is a
test file
-17 -69 -65 116 104 105 115 32 105 115 32 97 13 10 116 101 115 116 32 102 105 108 101 Process completed.开头的t怎么变成不认识的“锘縯”了,我在文件开头加空格,或者换行,还是会有多余字符,但是打开的是java文件则不会出现这种情况。
开始我还以为是字体问题,换了好几个字体都一样......
主要程序如下:
{ //创建文件输入流对象
FileInputStream rf = new FileInputStream("Test.txt");
int n=512;
byte buffer[] = new byte[n];
while ((rf.read(buffer,0,n)!=-1) && (n>0)) //读取输入流
{
String bu = new String(buffer);
System.out.println(bu);
for(int i=0;i<bu.length();i++){
// if(buffer[i]>0)
System.out.print(" "+buffer[i]);
}
}
System.out.println();
rf.close(); //关闭输入流
}
我Test.txt里内容是:
this is a
test file
可是我运行后输出结果却是:
锘縯his is a
test file
-17 -69 -65 116 104 105 115 32 105 115 32 97 13 10 116 101 115 116 32 102 105 108 101 Process completed.开头的t怎么变成不认识的“锘縯”了,我在文件开头加空格,或者换行,还是会有多余字符,但是打开的是java文件则不会出现这种情况。
开始我还以为是字体问题,换了好几个字体都一样......
下面贴出在我机子上的代码----------> import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;public class Test { /**
* 测试I/O流
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
FileInputStream rf = new FileInputStream("Test.txt");
int n = 512;
byte buffer[] = new byte[n];
while ((rf.read(buffer, 0, n) != -1) && (n > 0)) // 读取输入流
{
String bu = new String(buffer);
System.out.println(bu);
for (int i = 0; i < bu.length(); i++) {
// if(buffer[i]>0)
System.out.print(" " + buffer[i]);
}
}
System.out.println();
rf.close(); // 关闭输入流
}
}我觉得你出现此问题的可能是JDK的编码问题!
我的JDK是自动升级的1.6 我现在的程序是
import java.io.*;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException; public class IOStreamDemo {
public static void main(String arg[]) throws IOException {
/**
* 测试I/O流
* @param args
* @throws IOException
*/
FileInputStream rf = new FileInputStream("IOStreamDemo.java");
int n = 512;
byte buffer[] = new byte[n];
while ((rf.read(buffer, 0, n) != -1) && (n > 0)) // 读取输入流
{
String bu = new String(buffer);
System.out.println(bu);
for (int i = 0; i < bu.length(); i++) {
// if(buffer[i]>0)
System.out.print(" " + buffer[i]);
}
}
System.out.println();
rf.close(); // 关闭输入流
} 把导入文件Test.txt 改成本java文件IOStreamDemo.java显示却是正确的
InputStreamReader isr = new InputStreamReader(rf);
int rc;
StringBuffer sb = new StringBuffer();
while((rc = isr.read() )>-1)
{
sb.append((char)rc);
}
System.out.println(sb.toString());
isr.close();
rf.close();
BufferedReader
建立缓存渠道;而且是按字符读取;readLine方法;他连接的字符流(Reader);
FileInputStream
文件字节流,是InputStream抽象类的子类;是用read方法来实现读取功能的;
具体方法有3种:
read()
从此输入流中读取一个数据字节。
read(byte[] b)
从此输入流中将最多 b.length 个字节的数据读入一个字节数组中。
read(byte[] b, int off, int len)
从此输入流中将最多 len 个字节的数据读入一个字节数组中
你的txt文件有问题,你的txt文件使用什么编码方式
你的操作系统使用什么编码,new String()会使用操作系统默认的编码方式对
读入的字符流解码
我用的就是jdk 1.6.04 我让它打印本java文件确能正确显示...