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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 yuhaohong 于 2018-2-1 11:21 编辑

  • 在java里,IO的为Input和Output的缩写,字面意思为输入和输出,意味着这是java程序对程序外输出数据和从程序外读取数据的操作
  • 有人会问到,为什么java程序需要进行输入数据或者输出数据呢?这个问题很好解答,因为如果所有的数据都是程序自己产生,这样我们的程序开发就很复杂,比如我们要开发一个天气信息推送系统,我们不可能自己购买一整套气象设备收集信息,然后再推送到客户端,这样一来成本太高,二来开发周期太长,最方便的方法是:直接从气象局获取数据
  • 这样就遇到一个问题了,我把气象局的数据拿到了,怎么把它们放到我们的程序里让数据成为我的呢?这就需要通过输入(Input)来把数据导入。数据导入了,我们需要通过整理,把必须的,客户关心的数据推送到客户端,这也需要把我们的数据输出(Output)。
  • 以上就是IO的作用,获取数据和输出数据
  • 下面我们先写一个小Demo,通过Java操作一个文件
    [Java] 纯文本查看 复制代码
    public class Test01 {
            public static void main(String[] args) throws IOException {
                    FileInputStream fis = new FileInputStream("HelloWorld.txt");
                    byte[] arr = new byte[11];
                    fis.read(arr, 0, arr.length);
                    fis.close();
                    String ret = new String(arr);
                    System.out.println(ret);
            }
    }
  • 通过简单的操作,我们成功读取了一个文件,但是这样有个问题,因为我们读取的是字符,我们刚刚用的是字节流操作文件,这样子不方便操作,我们换一个操作字符的IO流对象来重复刚刚的操作,同时加上判断,不限制读取长度,只要读完了就自动停止,ok看代码
[Java] 纯文本查看 复制代码
public class Test02 {
        public static void main(String[] args) throws IOException {
                FileReader fr = new FileReader("HelloWorld.txt");
                StringBuilder sb = new StringBuilder();
                int read = -1;
                while ((read = fr.read()) != -1) {
                        sb.append((char)read);
                }
                fr.close();
                String ret = sb.toString();
                System.out.println(ret);
        }
}

  • 这样我们就可以更加方便的操作文本文件了,对于文本文件,这样子操作程序员们感觉,好事有点麻烦,一次读一个,我可不可以一次读多几个,完全ok,下面我们试试,来个快一点的
[Java] 纯文本查看 复制代码
public class Test03 {
        public static void main(String[] args) throws IOException {
                FileReader fr = new FileReader("HelloWorld2.txt");
                StringBuilder sb = new StringBuilder();
                char[] arr = new char[1024];
                int count = -1;
                while ((count = fr.read(arr)) != -1) {
                        String str = new String(arr, 0, count);
                        sb.append(str);
                        
                }
                fr.close();
                String ret = sb.toString();
                System.out.println(ret);
        }
}

  • 完全ok,通过数组,我们可以更加高效的读取数据,至于为什么高效,是因为我们一次读取一个数组的 长度,这样磁盘的来回读写次数就会大大较少
  • 既然我们知道用数组,sun公司肯定也知道,他们于是给我们提供的高效的操作类Buffered,看效果
[Java] 纯文本查看 复制代码
public class Test04 {
        public static void main(String[] args) throws IOException {
                FileReader fr = new FileReader("HelloWorld2.txt");
                BufferedReader br = new BufferedReader(fr);
                StringBuilder sb = new StringBuilder();
                String line = null;
                while ((line = br.readLine()) != null) {
                        sb.append(line);
                        sb.append("\r\n");
                }
                br.close();
                System.out.println(sb.toString());
        }
}


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马