Android开发Android开发经验谈Java入门基础

Java I/O(一)

2018-06-07  本文已影响123人  天一方蓝

本文出自:http://blog.csdn.net/dt235201314/article/details/70841306

一丶概述

回头看了下对I/O的整理,例子偏简单,有必要新增系列文章

最近几周的雏鹰飞翔计划的内容是:Java网络编程 Java IO 文件解析。分开写,本篇介绍Java I/O。

内容:

1.Java I/O 知识图谱

2.Java I/O 常见类使用(File FileOutputStream FileInputStream)

3.Demo 实现图片,txt文件复制

4.延伸学习: Android 记事本的实现 Java I/O 的工作机制

二丶正文

1.Java I/O 图谱

普通版:

image

入门到放弃版:

image

这里不对所有类做详解,用到时再参考API

2.Java I/O 常见类使用

File类:

/**
 * <pre>
 *     author : JinBiao
 *     CSDN : http://my.csdn.net/DT235201314
 *     time   : 2017/05/02
 *     desc   : 功能: File类的功能
 *              1:创建一个文件流,判断文件是否存在如果存不存在就创建新文件,前提必须在文件所在的文件夹必须存在
 *              2:创建文件夹
 *              3:把文件夹下面的的文件的信息显示出来,或者递归从文件夹下面找到
 *     version: 1.0
 * </pre>
 */

public class FileDemo {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //创建一个文件对象
//        File f = new File("C:/Users/Administrator/Desktop/aa.txt");
//        //得到文件路径
//        System.out.println("文件路径:" + f.getAbsolutePath());
//        //得到文件的大小
//        System.out.println("文件大小" + f.length());
//        //判断文件是否可读
//        System.out.println("可读" + f.canRead());
        
//        判断文件是否存在
//    File f=new File("C:/Users/Administrator/Desktop/aa.txt");
//    if(!f.exists())
//    {
//       //创建
//       System.out.println("创建文件");
//       try {
//          f.createNewFile();
//       } catch (IOException e) {
//          // TODO Auto-generated catch block
//          e.printStackTrace();
//       }
//    }else
//    {
//       System.out.println("文件已经存在");
//    }
        
      //判断文件夹是否存在
//    File f=new File("C:/Users/Administrator/Desktop/ff");
//    if(f.isDirectory())  //如果文件夹存在
//    {
//       System.out.println("文件夹已经存在");
//    }else{
//       //创建文件夹
//       f.mkdir();
//    }
        
        //列出一个文件夹下面所有的文件
        File f = new File("C:/Users/Administrator/Desktop");
        if (f.isDirectory()) {
            //创建一个用于存放文件名字的数组
            File lists[] = f.listFiles();
            //打印文件夹下面的文件名字
            for (int i = 0; i < lists.length; i++) {
                //得到文件的名字
                System.out.println("文件名:" + lists[i].getName());
            }
        }
    }
}

前面演示创建文件,没注释的演示显示我的桌面文件运行结果:

image

Demo2 读取文件

/**
 * <pre>
 *     author : JinBiao
 *     CSDN : http://my.csdn.net/DT235201314
 *     time   : 2017/05/02
 *     desc   :  演示FileInputStream
 *              1:把文件读入到计算机内存中
 *     version: 1.0
 * </pre>
 */
public class FileInputStreamDemo {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        File f = new File("C:/Users/Administrator/Desktop/aa.txt");
        FileInputStream fis = null;
        //因为File没有读功能,所以需要一个InputStream
        try {
            fis = new FileInputStream(f);
            //定义一个字节数组
            byte[] bytes = new byte[1024];
            //循环读取
            int n = 0;
            //读完返回 -1
            while ((n = fis.read(bytes)) != -1) {
                //把字节数组中的内容转换成字符串
                String s = new String(bytes, 0, n);
                //输出字符串中的内容
                System.out.println(s);
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            //关闭文件流必须关闭
            try {
                fis.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

Demo3 创建文件并输入内容

/**
 * <pre>
 *     author : JinBiao
 *     CSDN : http://my.csdn.net/DT235201314
 *     time   : 2017/05/02
 *     desc   :  演示 FileOutputStream
 *              1:创建文件并输入内容切记一定要先判断文件是否已经存在,否则会把原有的文件覆盖
 *     version: 1.0
 * </pre>
 */
public class FileOutputStreamDemo {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        File f = new File("C:/Users/Administrator/Desktop/ss.txt");
        FileOutputStream fos = null;
        if (!f.exists()) {
            try {
                fos = new FileOutputStream(f);
                String s = "老桑,向世界问好\r\n";
                String s1 = "美女,向世界问好";
                //定义字节数组
                // byte [] bytes=new byte[1024];

                fos.write(s.getBytes());
                fos.write(s1.getBytes());
            } catch (Exception e) {
                // TODO: handle exception
            } finally {
                try {
                    fos.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        } else {
            System.out.println("文件已经存在");
        }
    }
}

3.Demo 实现图片,txt文件复制

/**
 * <pre>
 *     author : JinBiao
 *     CSDN : http://my.csdn.net/DT235201314
 *     time   : 2017/05/02
 *     desc   : 复制照片
 *     version: 1.0
 * </pre>
 */
public class CopyPicture {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //创建输入流
        FileInputStream fis = null;
        //创建输出流
        FileOutputStream fos = null;
        try {
            //用于图片也可以
            fis = new FileInputStream("C:/Users/Administrator/Desktop/a.jpg");
            fos = new FileOutputStream("e:\\a.jpg");
            // 用于文本文件也可以
//            fis = new FileInputStream("C:/Users/Administrator/Desktop/ss.txt");
//            fos = new FileOutputStream("e:\\ss.txt");
            byte buf[] = new byte[1024];
            //循环读取
            int n = 0;//记录实际读取到的字节数
            //循环读取
            while ((n = fis.read(buf)) != -1) {
                //输出到指定文件
                fos.write(buf);
                System.out.println("文件已经完成复制");
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            //关闭文件流
            try {
                fis.close();
                fos.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

运行到这里学会了创建输入文件,读取文件,还会复制图片,想一想,这样是不是就可以做一个类似记事本功能的程序呢?当然原理是类似的

4.延伸学习: Android 记事本的实现 Java I/O 的工作机制

介于时间原因没有写Android 记事本程序,就直接在网上找了个比较好的,大家可以看看学习一下

image

感情上觉得这个记事本可用,简单精致又没有广告,感觉还不错

打开程序会发现,关于数据显示读取,用的是SQLite,当然SQLite本身的源码有用到Java I/O,封装好了,我们直接用就可以了

这里不解读源码,到后面关于SQLite的学习的时候再做解释学习

延伸阅读:

Java I/O :http://blog.csdn.net/suifeng3051/article/details/48344587

有文字说明增强理解,后面还有对NIO的一些介绍

Java I/O 的工作机制: https://www.ibm.com/developerworks/cn/java/j-lo-javaio/

对I/O架构机制的图文解读文章

Java I/O 操作: http://blog.csdn.net/deram_boy/article/details/51191425

对我没有提到的其他类的一些应用补充

Java I/O面试题 :http://blog.csdn.net/bubble1210/article/details/50839845

我的相关文章及补充学习:

Java 序列化 :http://blog.csdn.net/dt235201314/article/details/52124007

Socket 编程 :(后面网络编程时会说到再添加链接)

Java I/O 就整理,希望对大家有所帮助

写在最后

如果文章对你有帮助,欢迎点赞支持

代码下载:https://github.com/JinBoy23520/CoderToDeveloperByTCLer

不懂得地方,微信扫二维码提问

image
上一篇下一篇

猜你喜欢

热点阅读