第十二章大纲:
I/O input/output 输入/输出
一、创建文件,借助File类来实现
file.createNewFile() : 创建文件
file.exists() : 判断文件是否存在,如果存在,则返回true
delete() : 删除文件,如果删除成功,则返回true
deleteOnExit() : 程序退出的时候才删除文件

  1. import java.io.File;
  2. import java.io.IOException;
  3.  
  4. public class FileDemo {
  5.  
  6. public static void main(String[] args) throws IOException {
  7. File file = new File("D:\\123.txt");
  8. //判断文件是否存在
  9. if(!file.exists()){
  10. //文件不存在,创建该文件
  11. file.createNewFile();
  12. }
  13.  
  14. }
  15. }

二、创建文件夹
exists() : 判断文件夹是否存在,如果存在,则返回true
delete() : 删除文件夹,如果删除成功,则返回true
mkdir() : 创建文件夹
mkdirs() : 创建嵌套的文件夹

  1. import java.io.File;
  2. import java.io.IOException;
  3.  
  4. public class FileDemo {
  5.  
  6. public static void main(String[] args) throws IOException {
  7. File file = new File("D:\\test");
  8. //判断文件是否存在
  9. if(!file.exists()){
  10. //文件不存在,创建该文件
  11. file.mkdir();
  12. }
  13.  
  14. //多个文件夹嵌套时,使用mkdirs()方法创建文件
  15. File file2 = new File("D:\\test2\\demo");
  16. //判断文件是否存在
  17. if(!file2.exists()){
  18. //文件不存在,创建该文件
  19. file2.mkdirs();
  20. }
  21.  
  22. }
  23. }

三、
输入还是输出参照物是内存。我们的程序是在内存运行的
输入:d:\\720.txt--->内存
输出:内存---->f:\\721.txt

字节流和字符流,都可以实现文本的输入输出,区别是读写单位(速度)不一样
字节流:每次读写一个字节 1Byte=8bit 2^8-1 可以表示255个字符
字符流:每次读写一个字符 1字符=2字节 常见汉字5000多 2^16

节点流和过滤流都是对字节流和字符流做了封装,好处是读写速度更快。
1.字节流: FileInputStream 和 FileOutputStream
FileInputStream
read() :每次都一个字节,返回值是int,如果读到头,返回值是-1 想要读完文本中的数据,要用循环
available() :返回可读的字节数,返回值是int
close() :关闭输入流,释放资源

FileOutputStream
write() :向指定文件写数据
close() :关闭输出流

把720.txt文本中的内容输入到721.txt文本中去

  1. import java.io.File;
  2. import java.io.FileInputStream;
  3. import java.io.FileNotFoundException;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6.  
  7. /**
  8. * 字节流演示
  9. * @author Administrator
  10. *
  11. */
  12. public class FileInputDemo {
  13.  
  14. public static void main(String[] args) throws IOException {
  15.  
  16. //打开字节输入流
  17. FileInputStream fis = new FileInputStream(new File("D:\\720.txt"));
  18. //打开字节输出流
  19. FileOutputStream fos = new FileOutputStream(new File("D:\\721.txt"));
  20. //获取字节长度
  21. int length = fis.available();
  22. for(int i =0 ; i < length ; i++){
  23. //把从720.txt读取的字节输出到721.txt中
  24. fos.write(fis.read());
  25. }
  26.  
  27. //关闭输入输出流
  28. fis.close();
  29. fos.close();
  30.  
  31. }
  32.  
  33. }

2.字符流 :FileReader FileWriter

FileReader
read() : 读 参数可以是char数组,存放读到内存中的数据
close() : 关闭资源

FileWriter
write() :写 参数可以是char数组,也可以是String
close() : 关闭资源

  1. import java.io.File;
  2. import java.io.FileNotFoundException;
  3. import java.io.FileReader;
  4. import java.io.FileWriter;
  5. import java.io.IOException;
  6.  
  7. public class FileReaderDemo {
  8.  
  9. public static void main(String[] args) throws IOException {
  10.  
  11. FileReader fr = new FileReader(new File("D:\\720.txt"));
  12. FileWriter fw = new FileWriter(new File("D:\\721.txt"));
  13. char[] ch = new char[1024];
  14. int i=0;
  15. String s="";
  16. while((i=fr.read())!=-1){
  17. //把int类型的 i ,强转为char类型
  18. s=s+(char)i;
  19. }
  20.  
  21. //把取出的内容写入到721.txt中
  22. fw.write(s);
  23. fr.close();
  24. fw.close();
  25. }
  26.  
  27. }

从流向分
输入流 FileInputStream FileReader
输出流 FileOutputStream FileWriter
从读写单位
字节流 FileInputStream FileOutputStream
字符流 FileReader FileWriter

补充: 过滤流:给节点流做封装,提供缓冲区,读写速度会更快
BufferedReader
readLine() :每次读取一行
BufferedWriter
write() :写
newLine() :换行

  1. import java.io.*;
  2. public class BufferedDemo {
  3.  
  4. public static void main(String[] args) throws IOException {
  5. BufferedReader bfr = new BufferedReader(new FileReader(new File("D:\\720.txt")));
  6. BufferedWriter bfw = new BufferedWriter(new FileWriter(new File("D:\\721.txt")));
  7. //每次读取一行
  8. String str = bfr.readLine();
  9. String ss = str;
  10. while(str!=null){
  11. System.out.println(str);
  12. str = bfr.readLine();
  13.  
  14. //每拼接一次要换行,换行符也可以写成
  15. //ss= ss+System.getProperty("line.separator")+str;
  16. ss = ss + "\r\n" + str;
  17. }
  18. bfw.write(ss);
  19. bfr.close();
  20. bfw.close();
  21.  
  22. }
  23.  
  24. }

补充:序列化(Serializable)和反序列化 读写对象 读对象就是反序列化 写对象就是序列化
一个对象想要被序列化,必须实现一个接口:Serializable
ObjectOutputStream
writeObject(obj) :把对象obj作为整体以二进制流的形式写到指定文本中

ObjectInputStream
readObject() :把文本中的二进制对象读入内存

问: 当我们要保存多个对象的时候怎么办?可以多次调用writeObject()实现写,但是读的时候就麻烦了,我们可以把对象放到一个数组中,对数组执行序列化和反序列化操作

  1. import java.io.Serializable;
  2. /**
  3. * 创建一个学生类,实现Serializable接口
  4. * @author Administrator
  5. *
  6. */
  7. public class Student implements Serializable{
  8.  
  9. public String name;
  10. public String sex;
  11.  
  12. }

如果学生类没有实现Serializable接口,会报错java.io.NotSerializableException

对学生对象序列化后,会在磁盘中保存一个二进制文件

  1. import java.io.*;
  2.  
  3. /**
  4. * 序列化类
  5. * @author Administrator
  6. *
  7. */
  8. public class XuLieDemo {
  9.  
  10. public static void main(String[] args) throws IOException {
  11.  
  12. ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("D:\\123.txt")));
  13. //声明一个学生类型是数组,把实例化的学生对象存入数组中
  14. Student[] stu = {new Student("张三","男"),new Student("丽丽","女")};
  15. //对学生类型的数组序列化
  16. oos.writeObject(stu);
  17. oos.close();
  18.  
  19. }
  20.  
  21. }

反序列化操作

  1. import java.io.*;
  2.  
  3. /**
  4. * 反序列化类
  5. * @author Administrator
  6. *
  7. */
  8. public class FanXuLieDemo {
  9.  
  10. public static void main(String[] args) throws IOException, ClassNotFoundException {
  11.  
  12. ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("D:\\123.txt")));
  13. Student[] stu = (Student[]) ois.readObject();
  14. for (Student student : stu) {
  15. System.out.println(student.name+" "+student.sex);
  16. }
  17. ois.close();
  18.  
  19. }
  20.  
  21. }

java学习笔记--IO流的更多相关文章

  1. Java 学习笔记 IO流与File操作

    可能你只想简单的使用,暂时不想了解太多的知识,那么请看这里,了解一下如何读文件,写文件 读文件示例代码 File file = new File("D:\\test\\t.txt" ...

  2. java学习笔记——IO流部分

    IO流常用的有:字符流.字节流.缓冲流.序列化.RandomAccessFile类等,以上列出的都是开发中比较常用的. 1.字节流: 字节流包含:FileInputStream/FileOutputS ...

  3. java学习笔记 --- IO流小结

    IO流  |--字节流    |--字节输入流     InputStream      int read():一次读取一个字节      int read(byte[] bys):一次读取一个字节数 ...

  4. java 学习笔记之 流、文件的操作

    ava 学习笔记之 流.文件的操作 对于一些基础的知识,这里不再过多的解释, 简单的文件查询过滤操作 package com.wfu.ch08; import java.io.File; import ...

  5. java学习之IO流(学习之旅,一)

    个人在学习IO流的时候看到如下所示java 流类图结构的时候,我的感想是,这么多··处于蒙的状态. Java流类图结构 这么多,没有分类不好学,那我们就慢慢一口一口的吃,这样每天学习一点就好了,其实很 ...

  6. java学习笔记 --- IO(2)

    IO流的分类:  流向:  输入流  读取数据  输出流 写出数据  数据类型: 字节流 字节输入流  读取数据 InputStream 字节输出流  写出数据 OutputStream 字符流 字符 ...

  7. Java学习笔记-IO

    IO(Input Output)流,用来处理设备之间的数据传输 IO IO概述 Java对数据的操作是通过流的方式 Java用于操作流的对象都在IO包中 流按操作数据分为两种:字节流与字符流 流按流向 ...

  8. java学习之IO流

    java io流有四大家族分别是: 1.InputStream(字节输入流) 2.OutputStream(字节输入出流)3.Reader(字符输入流)4.Writer(字符输出流)四个类都是抽象类 ...

  9. Java学习 · 初识 IO流

    IO流   1. 原理与概念 a)     流 i.           流动,流向 ii.           从一端移动到另一端 源头到目的地 iii.           抽象.动态概念,是一连 ...

随机推荐

  1. margin小结

    一. margin百分比 1. 普通元素的百分比margin都是相对于容器的宽度计算 2. 绝对定位元素的百分比margin是相对于第一个定位祖先元素(relative/absolute/fixed) ...

  2. 用C语言将搜狗输入法词库转换成QQ拼音输入法词库

    搜狗输入法词库格式: 'ni'kan'xia 你看下 'ni'kan'xia'gai'hou 你看下改后 'ni'kan'xing'ma 你看行吗 'ni'kan'zen'me'yang 你看怎么样 ...

  3. Xshell中文版使用说明/下载

    个人本来一直用SecureCRT的这几天朋友推荐用xshell就尝试下载了一个结果发现这个比SecureCRT和puttytel好使多了切更能更完善强大特此推荐附带注册码一枚可装999台机器 1309 ...

  4. Eclipse 安装插件后不显示的解决办法

    有时候一些 eclipse 插件安装之后,打开 eclipse 死活都不显示,这时候可以: ① 把 eclipse/configuration/org.eclipse.update 删除掉.出现这种情 ...

  5. android自定义控件(1)-点击实现开关按钮切换

    自定义控件的步骤.用到的主要方法:   1.首先需要定义一个类,继承自View:对于继承View的类,会需要实现至少一个构造方法:实际上这里一共有三个构造方法: public View (Contex ...

  6. jsf简介

    JSF实现了基于web的以下三个梦想 1.java程序员不必顾虑HTTP的细节,可以按照原本熟悉的事件驱动模型来设计后台系统,并通过一个能担保数据类型无误的数据传递接口将后台系统与前台界面结合在一起. ...

  7. Linux服务器管理: 系统的进程管理ps命令

    源码包:2015-06-30 12:11:25 首先我们可以通过网络去下载相应的源码包:我们以apache为例: [root@localhostA1 opt]# wget http://archive ...

  8. 分享php中四种webservice实现的简单架构方法及实例

    一:PHP本身的SOAP所有的webservice都包括服务端(server)和客户端(client).要使用php本身的soap首先要把该拓展安装好并且启用.下面看具体的code首先这是服务端实现: ...

  9. 【C语言入门教程】7.3 结构体指针的定义和引用

    C 语言中指针的操作非常灵活,它也能指向结构体变量对结构体变量进行操作.在学习结构指针之前,需要再次加深对指针的认识.声明指针变量时所使用的数据类型修饰符实际上的作用是定义指针访问内存的范围,如果指针 ...

  10. 什么是H标签?H1,H2,H3标签?以及和strong标签使用的方法及重要性

    大家都知道,seo的一个很重要的一点就是要把网站做的条理清晰,让搜索引擎很容易的读明白,这个条理清晰不仅体现在网站的物理路径,url等地 方.在<h1><h2><h3&g ...