Java I/O

来源:互联网 发布:空间数据质量控制 编辑:程序博客网 时间:2024/06/10 18:39

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

欢迎Star(updating):https://github.com/JinBoy23520/CoderToDeveloperByTCLer

一丶概述

最近几周的雏鹰飞翔计划的内容是: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 图谱

普通版:


入门到放弃版:


这里不对所有类做详解,用到是再参考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());            }        }    }}
前面演示创建文件,没注释的演示显示我的桌面文件运行结果:


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 记事本程序,就直接在网上找了个比较好的,大家可以看看学习一下


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

打开程序会发现,关于数据显示读取,用的是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 就整理,希望对大家有所帮助


4 0
原创粉丝点击