第九章 文件处理IO 代码

  • 1.课前测试
  • 2.异常捕获 try{}-catch{}
  • 3.创建目录/文件 File
  • 文件的基本操作
    • 4.获取目录所有子文件名/子级文件对象数组
    • 5.遍历目录下的文件
  • 6.输入输出字节流的使用
  • 7.将字节数组,转为字符串
  • 8.缓冲字节流(处理流/包装流)
  • 9.案例演练 图片复制
  • 10. 对象流 (处理流/包装流)
  • 11. 字符流 (输入/输出字符流)
  • 12.缓冲字符流 (缓冲字符输入流/输出流)
  • 13. 字节字符转换流 (处理流/包装流)
  • 14. 格式化打印流(对于输出流的功能进行增强)
  • 15. IO流中的异常处理
  • 16.Properties文件的使用

1.课前测试


做题之前一定要先 “画结构图”:

文件路径如下:

代码如下:

package com.yzh70706.test1;public interface INut {String effect();
}
package com.yzh70706.test1;/*** @author: XYT* @create-date: 2022/7/6 9:01*/
public class Walnut implements INut{@Overridepublic String effect() {return "吃核桃补脑";}
}
package com.yzh70706.test1;/*** @author: XYT* @create-date: 2022/7/6 9:02*/
public class Almond implements INut{@Overridepublic String effect() {return "吃杏仁止咳润肺";}
}
package com.yzh70706.test1;public interface ITool {public void knock(INut iNut);
}
package com.yzh70706.test1;/*** @author: XYT* @create-date: 2022/7/6 9:06*/
public class Stone implements ITool{@Overridepublic void knock(INut iNut) {System.out.println("用石头敲开坚果");String s=iNut.effect();System.out.println(s);}
}
package com.yzh70706.test1;/*** @author: XYT* @create-date: 2022/7/6 9:08*/
public class Hammer implements ITool{@Overridepublic void knock(INut iNut) {System.out.println("用锤子敲开坚果");String s=iNut.effect();System.out.println(s);}
}
package com.yzh70706.test1;/*** @author: XYT* @create-date: 2022/7/6 9:08*/
public class People {ITool iTool;public void eat(INut iNut){this.iTool.knock(iNut);//iNut.effect(); //这句多余了}public void setiTool(ITool iTool){this.iTool=iTool;}
}
public class Test {public static void main(String[] args) {People p=new People();Walnut walnut=new Walnut();Almond almond=new Almond();ITool it1=new Stone();ITool it2=new Hammer();p.setiTool(it1);p.eat(walnut);p.setiTool(it2);p.eat(almond);}
}

运行结果如下:

2.异常捕获 try{}-catch{}

package com.yzh7.test1;import java.io.File;
import java.util.Scanner;/*** @author: hy* @create: 2022-07-06 09:47:00*/
public class Test {public static int he(int start,int end){int sum = 0;for(int i=start;i<=end;i++){sum+=i;}return sum;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);try {System.out.println("请输入第一个数:");int num1 = sc.nextInt();System.out.println("请输入第二个数:");int num2 = sc.nextInt();int res = num1 / num2;System.out.println("结果:" + res);int sum = he(1, 5);System.out.println("和:" + sum);}catch (Exception ex){System.out.println("出错了:"+ex.getMessage());}System.out.println("运行结束");}
}

3.创建目录/文件 File

//创建目录
directory.mkdirs();
//创建数据文件
file.createNewFile();

package com.yzh7.test1;import java.io.File;
import java.io.IOException;/*** @author: hy* @create: 2022-07-06 10:10:55*/
public class Test2 {public static void main(String[] args) throws IOException {//File:表示文件对象(目录文件,数据文件)//通过File对象可以在磁盘上创建文件,也可以访问磁盘上的文件,也可以删除磁盘文件//File file = new File("d:\\na.txt"); //捺斜杠,要写两个,进行转义//File file2 = new File("d:/aaa.txt");//撇斜杠(linux主要用这种)//File.separator:根据系统平台返回对应的路径分隔符//File file3 = new File("d:"+File.separator+"bbb.txt");//System.out.println(File.separator);File directory = new File("d:/xxx/yyy/");//创建目录directory.mkdirs();//使用File创建文件对象File file =new File("d:/xxx/yyy/aaa.txt");//判断文件是否存在System.out.println(file.exists());//文件不存在则创建文件if(!file.exists()){//创建数据文件file.createNewFile();}if(file.exists()) {//判断文件对象是否是数据文件System.out.println("是否是数据文件:"+file.isFile());//判断文件对象是否是目录文件System.out.println("是否是目录文件:"+file.isDirectory());//输出文件名字System.out.println("文件名字:"+file.getName());//输出文件路径System.out.println("文件路径:"+file.getPath());//输出文件大小System.out.println("文件大小:"+file.length());//删除文件//file.delete();}}
}

文件的基本操作

4.获取目录所有子文件名/子级文件对象数组

package com.yzh7.test1;import java.io.File;
import java.lang.reflect.Field;/*** @author: hy* @create: 2022-07-06 10:26:36*/
public class Test3 {public static void main(String[] args) {//创建目录文件File file = new File("d:/iotest");//获取目录下的所有子文件名//String[] names =  file.list();//遍历
//        for (String s:names){//            System.out.println(s);
//        }//返回子级文件对象数组File[] fs =  file.listFiles();for (File f : fs){System.out.println(f.getPath());System.out.println(f.getName());System.out.println(f.canExecute());System.out.println(f.canWrite());System.out.println(f.canRead());System.out.println(f.isDirectory());System.out.println(f.isFile());System.out.println(f.length());System.out.println("=============");}}
}

5.遍历目录下的文件

package com.yzh7.test1;import java.io.File;/*** @author: hy* @create: 2022-07-06 11:06:35*/
public class Test4 {public static void main(String[] args) {//遍历目录下的文件showFile("d:/iotest");}/*** //遍历目录下的文件* @param path*/public static void showFile(String path){//构建文件对象File file = new File(path);//判断文件是否存在if(!file.exists()){System.out.println("文件不存在");return;}//判断文件对象是一个目录还是一个数据文件if(file.isFile()){//如果是一个数据文件,则直接返回,不做遍历System.out.println(file.getPath());return;}//如果是目录,则进行遍历File[] fs = file.listFiles();//遍历目录下的子级文件for (File f: fs){//如果是数据文件,则输出文件路径和文件大小if(f.isFile()){System.out.println(f.getPath()+" "+f.length());}else if(f.isDirectory()){System.out.println(f.getPath()+" <DIR>");//进入子级目录,继续遍历它内部的文件showFile(f.getPath());}}}
}

6.输入输出字节流的使用

将程序中(内存)的数据写到文件中/将文件中的数据读取到程序中(内存)

package com.yzh7.test2;import java.io.*;/*** @author: hy* @create: 2022-07-06 11:27:43*/
public class Test {//将程序中(内存)的数据写到文件中public static void  w() throws IOException {//定义文件对象,关联到一个磁盘文件File file =new File("d:/yzh7.txt");//创建文件字节输出流对象:可以配置一个追加方式的boolean值OutputStream os = new FileOutputStream(file,true);//通过文件输出流对象,写数据到文件中String s = "abcdef";os.write(s.getBytes());//关闭流对象os.close();}//将文件中的数据读取到程序中(内存)public static void r() throws IOException {//创建文件对象,关联一个磁盘文件File file = new File("d:/yzh7.txt");//创建文件输入字节流对象//InputStream is = new FileInputStream("d:/yzh7.txt");InputStream is = new FileInputStream(file);//通过输入流对象,读取文件内容//定义字节数组,用于存储读入的内容byte[] bs = new byte[10];//读取数据,并返回读取个数。如果读取不到数据时,会返回-1int count = is.read(bs);System.out.println("读取的数据长度:"+count);//读取的内容/*for (byte b : bs){System.out.println(b);}*///将读取的内容构建成字符串String s = new String(bs,0,count);System.out.println(s);//关闭流对象is.close();}public static void main(String[] args) throws IOException {//调用写文件的方法w();//r();}
}

7.将字节数组,转为字符串

package com.yzh7.test2;/*** @author: hy* @create: 2022-07-06 11:36:13*/
public class Test2 {public static void main(String[] args) {//String s = "abcdef";//通过字符串获取字符串中字符对应的字节数组/*byte[] bs = s.getBytes();for (byte b : bs){System.out.println(b);}*///将字节数组,转为字符串byte[] bs = {101,102,103,104,105,106};//将字节数组中,从指定位置开始,指定长度的内容,转为字符串String str = new String(bs,2,2);System.out.println(str);}
}

8.缓冲字节流(处理流/包装流)

package com.yzh7.test3;import jdk.internal.util.xml.impl.Input;import java.io.*;/*** @author: hy* @create: 2022-07-07 09:40:09*/
public class Test{//缓冲写字节流public void bw() throws IOException {//创建文件输出字节流OutputStream os = new FileOutputStream("d:/0707.txt");//创建缓冲字节输出流(处理流/包装流)BufferedOutputStream bos = new BufferedOutputStream(os);//使用缓冲流对象,写数据bos.write("hello world".getBytes());//清空缓冲区bos.flush();//关闭流对象bos.close();os.close();}//缓冲读字节流public void br() throws IOException {//创建文件输入字节流InputStream is = new FileInputStream("d:/0707.txt");//创建缓冲输入流对象BufferedInputStream bis = new BufferedInputStream(is);//使用缓冲输入流读取数据byte[] bs = new byte[1024];//将数据读取到字节数组中,并返回读取数据的个数int count = bis.read(bs);System.out.println("读取的字节个数:"+count);//将字节数组构建成字符串String s = new String(bs,0,count);System.out.println(s);//关闭流对象,清空缓冲区bis.close();is.close();}public static void main(String[] args) throws IOException {//创建实例对象Test test = new Test();//调用实例方法//test.bw();test.br();}
}

9.案例演练 图片复制

package com.yzh7.test3;import java.io.*;/*** @author: hy* @create: 2022-07-07 09:56:42*/
public class Test2 {/*** 复制文件* @param srcPath  源文件路径* @param destPath 目标路径*/public static void copyFile(String srcPath,String destPath) throws IOException {//如何实现文件复制//创建缓冲输入流,用于读取源文件BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcPath));//创建缓冲输入流,用于写数据到目标文件BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destPath));//创建字节数组,用于存储每次读取的内容byte[] bs = new byte[1024];int count = 0;//循环读取while ((count=bis.read(bs))!=-1){bos.write(bs,0,count);}
//        while (true){//            int count = bis.read(bs);
//            //如果读取到的字节个数是-1,则表示读取结束
//            if(count==-1){//                //读取结束,退出循环
//                break;
//            }
//            //将读取的数据,写到目标文件中
//            bos.write(bs,0,count);
//        }//清空缓冲区bos.flush();//关闭流对象:先使用的后关闭,后使用的先关闭bos.close();bis.close();}public static void main(String[] args) throws IOException {//文件复制copyFile("d:/3.jpg","f:/5.jpg");}
}

10. 对象流 (处理流/包装流)

package com.yzh7.test4;import java.io.Serializable;/*** @author: hy* @create: 2022-07-07 10:52:45*/
//注意:1.如果要将一个对象序列化到磁盘上,那么该对象必须实现Serializable接口
// 2.为了保证类的一致性,需要在类中定义版本序列号serialVersionUID
//3.如果类中某个属性不需要序列化,则可以给该字段标记transient
//需要序列化的对象必须实现序列化接口
public class Game implements Serializable {//定义类的序列化版本号:用于标记当前类,确保类的唯一性private static final long serialVersionUID=123123123;//游戏名称//transient:不进行序列化private transient String name;//游戏关卡private int level;private int num;public Game(String name, int level) {this.name = name;this.level = level;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getLevel() {return level;}public void setLevel(int level) {this.level = level;}@Overridepublic String toString() {return "Game{" +"name='" + name + '\'' +", level=" + level +'}';}
}
package com.yzh7.test4;import java.io.*;/*** @author: hy* @create: 2022-07-07 10:53:45*/
public class Test {//序列化对象:将内存中的对象数据,写到磁盘上public static void writeObj() throws IOException {//创建游戏对象Game game =new Game("1942重返德军总部",5);//序列化对象//创建对象字节输出流ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("d:/game.obj"));//使用对象输出流写对象数据oos.writeObject(game);//关闭流对象oos.close();}//反序列化:将磁盘上的数据,读取到内存中public static void readObj() throws IOException, ClassNotFoundException {//创建对象输入流ObjectInputStream ois = new ObjectInputStream(new FileInputStream("d:/game.obj"));//使用对象流,读取磁盘的对象数据,还原到内存中Game game = (Game)ois.readObject();System.out.println(game);}public static void main(String[] args) throws IOException, ClassNotFoundException {//writeObj();readObj();}
}

11. 字符流 (输入/输出字符流)

package com.yzh7.test5;import java.io.*;/*** @author: hy* @create: 2022-07-07 11:14:21*/
public class Test {public static final String MY_PATH="d:/aaa.txt";//写/输出字符流public static void w() throws IOException {//创建输入字符流Writer writer = new FileWriter(MY_PATH);//写出数据//char[] cs = new char[]{'我','爱','北','京'};writer.write("我爱北京天安门");//关闭流对象writer.close();}//读取/输入字符流public static void r() throws IOException {//创建字符输入流Reader reader = new FileReader(MY_PATH);//定义字符数组,用于存储读取字符内容char[] cs = new char[1024];//读取字符串内容,返回读取的个数int count = reader.read(cs);System.out.println("读取的字符个数:"+count);String s = new String(cs,0,count);System.out.println(s);//关闭字符输入流reader.close();}public static void main(String[] args) throws IOException {//w();r();}
}

12.缓冲字符流 (缓冲字符输入流/输出流)

BufferedReader: 缓冲字符输入流
BufferedWriter: 缓冲字符输出流

package com.yzh7.test5;import java.io.*;/*** @author: hy* @create: 2022-07-07 11:21:34*/
public class Test2 {//缓冲读取public static void r() throws IOException {//创建字符缓冲流输入流对象BufferedReader br = new BufferedReader(new FileReader("d:/aaa.txt"));//直接读取一行数据String res =  br.readLine();System.out.println(res);//循环读取,如果读取结果为null,则读取结束//关闭缓冲流br.close();}//缓冲写出public static void w() throws IOException {//创建字符缓冲输出流对象BufferedWriter bw = new BufferedWriter(new FileWriter("d:/aaa.txt"));//直接写出一行字符串bw.write("齐天大圣孙悟空");//换行bw.newLine();bw.write("保护唐僧去取经");//清空缓冲区bw.flush();//关闭流对象bw.close();}public static void main(String[] args) throws IOException {//w();r();}
}

13. 字节字符转换流 (处理流/包装流)

InputStreamReader 将字节输入流转换成字符输入流
OutputStreamWriter 将字符输出流转为字节输出流

package com.yzh7.test6;import java.io.*;/*** @author: hy* @create: 2022-07-07 11:49:22*/
public class Test {public static void main(String[] args) throws IOException {//输入字节字符流//用字节流读取数据,然后字符流处理//InputStreamReader isr = new InputStreamReader(new FileInputStream("d:/0707.txt"));//使用缓冲字符流读取数据
//        BufferedReader br =new BufferedReader(new InputStreamReader(new FileInputStream("d:/0707.txt")));
//        String res = br.readLine();
//        System.out.println(res);
//        br.close();//输出字符字节流//OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("d:/0707.txt"));//缓冲字符输出流BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d:/0707.txt")));bw.write("这是第一行");bw.newLine();bw.write("这是第二行");bw.close();}
}

14. 格式化打印流(对于输出流的功能进行增强)

PrintWriter: 是Writer的子类,其作用是将格式化对象打印到一个文本输出流, 主要方
法:print()、println()、write()

package com.yzh7.test6;import java.io.FileNotFoundException;
import java.io.PrintWriter;/*** @author: hy* @create: 2022-07-07 11:55:50*/
public class Test2 {public static void main(String[] args) throws FileNotFoundException {//打印输出(文件)字符流//System.out.println("1123123123");PrintWriter pw = new PrintWriter("d:/bbb.txt");pw.write("这是一个内容");pw.println("这是另外一个内容");//参数占位符:%s 字符串  %d 整数  %f小数pw.printf("姓名:%s 性别:%s 年龄:%d 身高:%f","张三","男",18,1.7);//清空缓冲pw.flush();//关闭流对象pw.close();}
}

15. IO流中的异常处理

package com.yzh7.test1;import java.io.*;/*** @author: hy* @create: 2022-07-08 09:26:23*/
public class Test {public static void main(String[] args) {//定义文件路径String srcFilePath = "d:/0707.txt";String destFilePath="d:/0808.txt";//创建文件对象File srcFile = new File(srcFilePath);File destFile = new File(destFilePath);//声明流对象变量InputStream is=null;OutputStream os=null;try {//创建流对象is = new FileInputStream(srcFile);os = new FileOutputStream(destFile);//循环读取并写出实现复制功能int count = -1;byte[] bs = new byte[1024];while (true){count = is.read(bs);if(count==-1){break;}//使用输出流写文件os.write(bs,0,count);}} catch (FileNotFoundException e) {//FileNotFoundException:文件找不到e.printStackTrace();} catch (IOException e) {//IOException:进行io操作出现问题 input oupute.printStackTrace();}finally {//关闭流对象try {os.close();} catch (IOException e) {e.printStackTrace();}try {is.close();} catch (IOException e) {e.printStackTrace();}}}
}

16.Properties文件的使用

package com.yzh7.test1;import jdk.internal.util.xml.impl.Input;import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import java.util.ResourceBundle;/*** @author: hy* @create: 2022-07-08 09:45:23*/
public class Test2 {public static void main(String[] args) throws IOException {//用当前类的类加载器加载属性文件,返回输入流InputStream is =  Test2.class.getClassLoader().getResourceAsStream("stu.properties");System.out.println(is);//创建Properties对象(可以存储键值对数据),处理properties文件Properties properties = new Properties();//加载数据流properties.load(is);//输出学生信息//properties.getProperty(键):根据键获取值System.out.println(properties.getProperty("name"));System.out.println(properties.getProperty("sex"));System.out.println(properties.getProperty("age"));System.out.println(properties.getProperty("tall"));}
}


name=tom
sex=man
age=18
tall=1.7
// An highlighted block
var foo = 'bar';

第九章 文件处理(IO) ② 代码相关推荐

  1. 改写《python数据挖掘入门与实践》第九章Gutenberg书籍下载代码

    @数据挖掘 改写<python数据挖掘入门与实践>第九章Gutenberg书籍下载代码 可能是gutenberg网站改版的缘故,随书附带的getdata.py代码执行会报错. 个人将其进行 ...

  2. python - 啃书 第九章 文件访问

    概述 计算机文件是存储在外部存储器上的数据集合.通常计算机处理的大量数据都是以文件的形式组织存放的,操作系统也是以文件为单位对数据进行管理的. 每个文件都有一个文件名,文件名由基本名和扩展名组成,不同 ...

  3. corepython第九章:文件和输入输出

    学习笔记: OS模块代码示例: 1 import os 2 for tmpdir in ('/tmp',r'c:\users\administrator\desktop'): 3 #如果存在括号里面的 ...

  4. Python核心编程(第九章)--文件和输入输出

    文件内建函数: open()函数提供了初始化输入/输出操作的通用接口 open()基本语法:file_object = open(filename,access_mode='r',buffering= ...

  5. 《统计学习方法》 第九章 EM算法(原理+代码)

    EM算法 EM算法是含有隐变量的概率模型极大似然估计或极大后验概率估计的迭代算法 含有隐变量的概率模型的数据表示为 θ \theta θ 这里, Y Y Y是观测变量的数据, Z Z Z是隐变量的数据 ...

  6. 第十一章 文件处理(IO)(下)

    1.练习回顾 ①使用文件输出字节流将"hello world"输出到文件中: ②使用文件输入字节流将文件中的内容读取进来并打印到控制台中. public static void m ...

  7. c语言第9章实验报告,《经典规范C语言程序设计》实验报告(第九章)文件程序设计.doc...

    <经典规范C语言程序设计>实验报告(第九章)文件程序设计 <高级语言程序设计>实验报告 班级: 学号: 姓名: 成绩: 实验日期: 年 月 日 实验题目: 实验九 文件程序设计 ...

  8. 学习笔记-第九章 恶意代码分析实战

    第九章 OllyDbg 1.加载恶意代码直接加载可执行文件,甚至dll程序.如果恶意代码已经在你的系统上运行,你可以通过附加进程的方式调试它.另外,ollydbg是一个灵活的调试系统,可以使用命令行选 ...

  9. java2实用教程第5版第九章_java2实用教程(例子代码)第4版第九章.doc

    java2实用教程(例子代码)第4版第九章 java2实用教程(例子代码)第4版第九章 例9_3 Lt4_3.java public clss Lt4_3 { public static void m ...

最新文章

  1. 11.CCNA第十一天-配置OSPF/EIGRP(增强型内部网关协议)
  2. Linux 最常用命令整理,建议收藏!
  3. java字符串 直接能网络传输吗_atitit.二进制数据无损转字符串网络传输
  4. 毕业设计 基于python的网络爬虫-基于python的网络爬虫
  5. 阿里云OSS Multipart Upload上传实例
  6. 标准物模型:设备无缝对接,IOT界的福音
  7. php 投票 排序,关于phpcms v9投票模块选项排序问题修改_PHP教程
  8. 新海诚动画背景简单娱乐分析
  9. ORACLE常用监控语句(未完待续)
  10. mysql自增主键到头了怎么办_数据库自增主键用完了怎么办
  11. 解决M1的mac打开JD-GUI报错问题(超简单)
  12. C语言打印打印ASCLL表
  13. 百度SEO站群WordPress企业主题:企业一号 V 1.2.2
  14. 开源项目ruoyi-springboot-vue源码分析之LogAspect日志打印
  15. Python 遗传算法实现字符串
  16. WinDbg手动修复堆栈
  17. 怎么减少别人屏蔽你的朋友圈(二)
  18. 20P37 Premiere预设200种文字标题介绍动画合集包 200 Titles Collection下载
  19. python设置清华源镜像
  20. CC(标准)版D碟收藏指南(二)

热门文章

  1. coot怎么调用python_pymol使用笔记教程范本.doc
  2. 制作启动U盘;重装MacOS
  3. 西门子PLC1200自由口通信
  4. 软件设计师-11.知识产权与标准化
  5. 安装 kubeadm、kubelet 和 kubectl
  6. OpenCV系列之特征匹配 | 四十四
  7. OpenCV系列之用于角点检测的FAST算法 | 四十一
  8. redis生产环境中慎用keys模糊匹配方法
  9. stm32f105rct6 使用ADC1 的 PC0、PC1、PC2、PC3、PC4通道 测电压
  10. 2022-4-19 LT模式和ET模式《Linux高性能服务器》笔记