神刀安全网

Java I/O(一)

本文出自: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 图谱

普通版:

Java I/O(一)

image

入门到放弃版:

Java I/O(一)

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());             }         }     } } 

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

Java I/O(一)

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

Java I/O(一)

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

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

Java I/O(一)

image

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » Java I/O(一)

分享到:更多 ()