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

 import java.io.File;
import java.io.IOException; public class FileDemo { public static void main(String[] args) throws IOException {
File file = new File("D:\\123.txt");
//判断文件是否存在
if(!file.exists()){
//文件不存在,创建该文件
file.createNewFile();
} }
}

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

 import java.io.File;
import java.io.IOException; public class FileDemo { public static void main(String[] args) throws IOException {
File file = new File("D:\\test");
//判断文件是否存在
if(!file.exists()){
//文件不存在,创建该文件
file.mkdir();
} //多个文件夹嵌套时,使用mkdirs()方法创建文件
File file2 = new File("D:\\test2\\demo");
//判断文件是否存在
if(!file2.exists()){
//文件不存在,创建该文件
file2.mkdirs();
} }
}

三、
输入还是输出参照物是内存。我们的程序是在内存运行的
输入: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文本中去

 import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException; /**
* 字节流演示
* @author Administrator
*
*/
public class FileInputDemo { public static void main(String[] args) throws IOException { //打开字节输入流
FileInputStream fis = new FileInputStream(new File("D:\\720.txt"));
//打开字节输出流
FileOutputStream fos = new FileOutputStream(new File("D:\\721.txt"));
//获取字节长度
int length = fis.available();
for(int i =0 ; i < length ; i++){
//把从720.txt读取的字节输出到721.txt中
fos.write(fis.read());
} //关闭输入输出流
fis.close();
fos.close(); } }

2.字符流 :FileReader FileWriter

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

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

 import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException; public class FileReaderDemo { public static void main(String[] args) throws IOException { FileReader fr = new FileReader(new File("D:\\720.txt"));
FileWriter fw = new FileWriter(new File("D:\\721.txt"));
char[] ch = new char[1024];
int i=0;
String s="";
while((i=fr.read())!=-1){
//把int类型的 i ,强转为char类型
s=s+(char)i;
} //把取出的内容写入到721.txt中
fw.write(s);
fr.close();
fw.close();
} }

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

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

 import java.io.*;
public class BufferedDemo { public static void main(String[] args) throws IOException {
BufferedReader bfr = new BufferedReader(new FileReader(new File("D:\\720.txt")));
BufferedWriter bfw = new BufferedWriter(new FileWriter(new File("D:\\721.txt")));
//每次读取一行
String str = bfr.readLine();
String ss = str;
while(str!=null){
System.out.println(str);
str = bfr.readLine(); //每拼接一次要换行,换行符也可以写成
//ss= ss+System.getProperty("line.separator")+str;
ss = ss + "\r\n" + str;
}
bfw.write(ss);
bfr.close();
bfw.close(); } }

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

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

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

 import java.io.Serializable;
/**
* 创建一个学生类,实现Serializable接口
* @author Administrator
*
*/
public class Student implements Serializable{ public String name;
public String sex; }

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

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

 import java.io.*;

 /**
* 序列化类
* @author Administrator
*
*/
public class XuLieDemo { public static void main(String[] args) throws IOException { ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("D:\\123.txt")));
//声明一个学生类型是数组,把实例化的学生对象存入数组中
Student[] stu = {new Student("张三","男"),new Student("丽丽","女")};
//对学生类型的数组序列化
oos.writeObject(stu);
oos.close(); } }

反序列化操作

 import java.io.*;

 /**
* 反序列化类
* @author Administrator
*
*/
public class FanXuLieDemo { public static void main(String[] args) throws IOException, ClassNotFoundException { ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("D:\\123.txt")));
Student[] stu = (Student[]) ois.readObject();
for (Student student : stu) {
System.out.println(student.name+" "+student.sex);
}
ois.close(); } }

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. Mount挂载命令使用方法

    语法: mount -t 类型 -o 挂接方式 源路径 目标路径     -t 详细选项: 光盘或光盘镜像:iso9660 DOS fat16文件系统:msdos Windows 9x fat32文件 ...

  2. java批量生成excel代码分享

    package com.test.util; /** * @author ocq * */ import java.io.FileOutputStream; import java.io.IOExce ...

  3. C语言之strrchr函数

    from:http://blog.csdn.net/hgj125073/article/details/8443912 [FROM MSDN && 百科] 原型:char *strrc ...

  4. 分布式缓存之 memcache 实现分布式缓存

    最近想搞点分布式,但是不知道整点什么,来点简单的吧. 今天讲下memcache的分布式缓存 首先下载memcache的服务器端 百度下可以找到 然后执行安装和开启(关闭服务器)命令(还有其他的命令 可 ...

  5. vim如何进行分屏操作

    文章转自:http://www.netingcn.com/vim-%E5%88%86%E5%B1%8F%E6%93%8D%E4%BD%9C.html 启动vim打开多个文件并分屏显示: vim -on ...

  6. codeforces Diagrams & Tableaux1 (状压DP)

    http://codeforces.com/gym/100405 D题 题在pdf里 codeforces.com/gym/100405/attachments/download/2331/20132 ...

  7. Tomcat 6 JNDI数据源详解

    数据库连接池这个概念应该都不陌生,在Java中连接池也就是数据库的连接池,它是一种采用连接复用的思想避免多次连接造成资源的浪费机制. 最常见的连接池就是DBCP和C30P了,在tomcat中默认使用的 ...

  8. 在WordPress后台菜单系统中添加Home链接

    在wordpress后台如果想打开前台的话,要想先把鼠标移动到左上角菜单,然后在下拉菜单中点击“查看站点”,很是麻烦,能不能在 WordPress 后台菜单系统中添加 Home 链接呢? 将下面代码复 ...

  9. 修改Ubuntu12.04 左侧启动器Launcher图标大小,以及如何隐藏启动器?

    在 VirtualBox 中安装了 Ubuntu 12,一直使用 2D 桌面,3D桌面没用上,估计是电脑配置低的问题. 左边启动器的图标特别大,占据了很多的桌面空间,打算调小点.奇怪的是,在“系统设置 ...

  10. SQLite 数据库调研

    SQLite数据库的特点(转载的): ★技术上的优点和特性 SQLite是一个轻量级.跨平台的关系型数据库.既然号称关系型数据库,支持SQL92标准中常用的玩意儿(比如视图.事务.触发器等)就是理所当 ...