A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© jagon 中级黑马   /  2014-3-15 18:13  /  1096 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package pack1;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
public class TestDemo2 {
    public static void main(String[] args) throws Exception {
        File file = new File("F:" + File.separator + "test"
                + File.separator + "demo.txt"); // 定义文件路径
        if (file.exists()) { // 文件存在则可以读取
            InputStream input = new FileInputStream(file);   //实例化读入流
            byte data[] = new byte[1024]; // 假设要读的长度是1024
            int foot = 0; // 操作data数组的脚标
            int temp = 0;
            do {
                temp = input.read(); // 读取了一个字节
                    data[foot++] = (byte) temp; // 保存读取进来的单个字节
            } while (temp != -1);// 没有读取完,还有内容
            input.close();
            System.out.println("读取的数据是:【" + new String(data, 0, foot) + "】");
        }
    }
}

截图02.jpg (55.56 KB, 下载次数: 49)

截图02.jpg

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

1 个回复

倒序浏览
这里用do...while循环不合适     
       do {
                temp = input.read(); // 读取了一个字节
                    data[foot++] = (byte) temp; // 保存读取进来的单个字节
            } while (temp != -1);
do...while循环是先执行循环体再判断终止条件。
在这个程序里,当读到文件最后一个字符时,do{}语句中取到temp='g',将其写入到data[]数组中,然后判断temp是否为-1,而此时temp='g',所以终止条件不成立,do{}语句再次执行,这时因为已经到达文件结尾处,所以temp=-1,而且程序将这个-1值写到data数组中的,而字符集编码无法识别-1,所以就输出了个问号?

应该使用while(){}语句,如下修改后就没有?了:
import java.io.FileInputStream;
import java.io.InputStream;
public class TestDemo2 {
    public static void main(String[] args) throws Exception {
        File file = new File("F:" + File.separator + "test"
                + File.separator + "demo.txt"); // 定义文件路径
        if (file.exists()) { // 文件存在则可以读取
            InputStream input = new FileInputStream(file);   //实例化读入流
            byte data[] = new byte[1024]; // 假设要读的长度是1024
            int foot = 0; // 操作data数组的脚标
            int temp = 0;
            while((temp=input.read())!=-1){
                data[foot++] = (byte) temp; // 保存读取进来的单个字节
            }
            input.close();
            System.out.println("读取的数据是:【" + new String(data, 0, foot) + "】");
        }
    }
}

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马