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 图谱
普通版:
入门到放弃版:
这里不对所有类做详解,用到时再参考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 就整理,希望对大家有所帮助
写在最后
如果文章对你有帮助,欢迎点赞支持
代码下载:https://github.com/JinBoy23520/CoderToDeveloperByTCLer
不懂得地方,微信扫二维码提问