1、IO概述
IO(Input/Output):输入和输出,指的是某个设备或环境进行数据的输入或者输出。例如:键盘的输入,再比如显示器就是输出设备,输出图像。
对于java来说输入输出问题,java将它抽象成流对象来解决。
以游戏程序为中心读取文件就是输入,写入文件是输出。
IO流在java中从输入输出角度分类:
1.输入流
2.输出流
IO流在java中从数据的角度来分类:
1.字符流
文本,我们能读的懂的都可以认为是字符流。比如:文章,java文件等等
2.字节流
二进制的数据,这种数据一般用文本打开我们读不懂。比如,图片文件,mp3文件,等等。
1).字符流
文本,我们能读的懂的都可以认为是字符流。比如:文章,java文件等等
字符输入流的超类:
Reader: 子类FileReader,BufferedReader
字符输出流的超类
Writer:子类FileWriter,BufferedWriter
2).字节流
二进制的数据,这种数据一般用文本打开我们读不懂。比如,图片文件,mp3文件。
字节输入流的超类:
InputStream: 子类FileInputStream
字节输出流的超类
OutputStream:子类FileOutputStream
2、字符输出流
使用字符流向一个文件输入helloworld。
分析:
步骤: 1.创建文件
2.创建输出流对象
3.把流指向指定的文件
4.释放资源
package com.rl.io; import java.io.File; import java.io.FileWriter; import java.io.IOException; /** * 使用字符流向一个文件中输入helloworld */ public class IOchaDemo { public static void main(String[] args) { writerFile1(); } public static void writerFile(){ //创建文件 File file = new File("a.txt"); //创建输出流对象,IO流都会出现异常,需要用try-catch处理 FileWriter fw = null; try { //创建输出流对象 fw = new FileWriter(file); //把内容写入文件 fw.write("helloworld"); //字符流的特点:清空缓冲区,把内容写入到文件中 fw.flush(); } catch (IOException e) { e.printStackTrace(); }finally{ if(fw != null){ try { //close关闭输出流时会先清理缓冲区 fw.close(); } catch (IOException e) { e.printStackTrace(); } } } } public static void writerFile1(){ FileWriter fw = null; try { //创建输出流对象 fw = new FileWriter("b.txt"); //把内容写入文件 fw.write("helloworld"); //字符流的特点:清空缓冲区,把内容写入到文件中 fw.flush(); } catch (IOException e) { e.printStackTrace(); }finally{ if(fw != null){ try { //close关闭输出流时会先清理缓冲区 fw.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
3、输出字符流的FileWriter的普通构造器
4、向文件中输出100个hellowoeld
package com.rl.io; import java.io.File; import java.io.FileWriter; import java.io.IOException; /** * 向一个文件中输出100个helloworld */ public class IOCharDemo1 { public static void main(String[] args) { writerFile1(); } public static void writerFile1(){ FileWriter fw = null; try { //创建输出流对象 fw = new FileWriter("b.txt"); for(int i = 0;i<100;i++){ //把内容写入文件 fw.write("helloworld"); if(i%10 == 0){ //清空缓冲区,把内容写入到文件中 fw.flush(); } } //最后把缓冲区中残留的数据写入文件 fw.flush(); } catch (IOException e) { e.printStackTrace(); }finally{ if(fw != null){ try { //close关闭输出流时会先清理缓冲区 fw.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
5、FileWriter的追加构造器
package com.rl.io; import java.io.File; import java.io.FileWriter; import java.io.IOException; /** * FileWriter的追加构造器 */ public class IOCharDemo2 { public static void main(String[] args) { writerFile1(); } public static void writerFile1(){ FileWriter fw = null; try { //创建输出流对象的追加构造器 fw = new FileWriter("b.txt",true); for(int i = 0;i<100;i++){ //把内容写入文件 fw.write("helloworld"); if(i%10 == 0){ //清空缓冲区,把内容写入到文件中 fw.flush(); } } //最后把缓冲区中残留的数据写入文件 fw.flush(); } catch (IOException e) { e.printStackTrace(); }finally{ if(fw != null){ try { //close关闭输出流时会先清理缓冲区 fw.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
6、输出换行
package com.rl.io; import java.io.File; import java.io.FileWriter; import java.io.IOException; /** * 输出换行,windos中:\r\n */ public class IOCharDemo3 { public static void main(String[] args) { writerFile1(); } public static void writerFile1(){ FileWriter fw = null; try { //创建输出流对象 fw = new FileWriter("b.txt"); for(int i = 0;i<100;i++){ //把内容写入文件,内容换行,为了兼容记事本,我们一般用\r\n的方式来进行换行 fw.write("i love you" +i +"\r \n"); if(i%10 == 0){ //清空缓冲区,把内容写入到文件中 fw.flush(); } } //最后把缓冲区中残留的数据写入文件 fw.flush(); } catch (IOException e) { e.printStackTrace(); }finally{ if(fw != null){ try { //close关闭输出流时会先清理缓冲区 fw.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
7、FileWriter的写入功能(5种)
package com.rl.io; import java.io.File; import java.io.FileWriter; import java.io.IOException; /** * FileWriter的写入功能(5种) */ public class IOCharDemo4 { public static void main(String[] args) { writerFile1(); } public static void writerFile1(){ FileWriter fw = null; try { //创建输出流对象 fw = new FileWriter("b.txt"); char[] chs = {'a','c','v','d','s'}; fw.write(chs); //把字符数组的一部分数据写入进文件中,第一个参数是字符数组,第二是参数是开始索引,第三个参数是从开始索引以后取得字符串的长度,注意不能越界 fw.write(chs, 2, 3); //通过int值来写入相应的ascii码值 fw.write(100); //写入字符串 fw.write("100"); // fw.write("helloworld", 3, 4); //最后把缓冲区中残留的数据写入文件 fw.flush(); } catch (IOException e) { e.printStackTrace(); }finally{ if(fw != null){ try { //close关闭输出流时会先清理缓冲区 fw.close(); } catch (IOException e) { e.printStackTrace(); } } } } }