Java I/O流(File、字节流、字符流、过滤流、对象流)详解
File以及I/O流
一、File类的使用
java.io.File类
- 代表硬盘上的一个文件或者目录
java.io.File类作用:
每个File类的对象表示一个磁盘文件或目录,其对象属性中包含了文件或目录的相关信息,如名称、长度、所含文件个数等,调用它的方法则可以完成对文件或目录的常用管理操作,例如,创建、删除等操作。
Java中文件或者目录的路径表示
- Windows中文件或者目录的表示D:\Wenjianjia\1.txt
- Java中文件或者目录的表示D:\Wenjianjia\1.txt,或者D:/Wenjianjia/1.txt
File类的构造方法:
由于File类的每一个对象都表示的是一个具体的目录或者文件,所以File类没有提供无参的构造方法,File类的所有构造方法都需要一个目录或者文件的路径作为参数
- File(String pathname)
- File(String parent, String child)
- File(File parent, String child)
File类常用方法:
- boolean **createNewFile()**创建一个新文件
- boolean **mkdir() / mkdirs()**创建新的目录
- boolean delete() 删除文件或者目录
- void deleteOnExit() 虚拟机退出时删除文件或者目录
- boolean exists() 判断当前文件或者目录是否存在
- boolean isFile() 判断File对象代表的是否是一个文件
- boolean isDirectory() 判断File对象代表的是否是一个目录
- String getPath() 返回当前File对象的字符串路径
- String **getName()**返回当前File对象的文件名或者目录名
- String **getParent()**返回当前File对象的父级目录
- String getAbsolutePath()返回当前File对象的绝对路径
- String[] **list()**返回当前File对象包含的子目录以及文件
- **canExecute()**测试应用程序是否可以 执行 此抽象路径名表示的文件。
- canRead() 是否可读
- canWritr() 是否可以修改
- isAbsoluteFile() 是否为绝对路径
- renameTo() 重命名
package com.File_IO.File_1;import java.io.File;
import java.io.IOException;
import java.util.Arrays;public class Wnjian {public static void main(String[] args) throws IOException {File file = new File("H:\\File");//代表硬盘上的一个文件或者目录file = new File("src\\com\\File_IO\\File_1");//绝对路径:从盘符开始的路径//相对路径:参考当前项目的路径//测试应用程序是否可以 执行 此抽象路径名表示的文件。boolean b = file.canExecute();System.out.println(b);//trueboolean b1 = file.canRead();//是否可以读boolean b2 = file.canWrite();//是否可以修改//file.delete();//删除此抽象路径名表示的文件或目录。//file.deleteOnExit();// 在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。boolean exists = file.exists();//测试此抽象路径名表示的文件或目录是否存在。String name = file.getName();//返回由此抽象路径名表示的文件或目录的名称。String parent = file.getParent();// 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。File parentFile = file.getParentFile();// 返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null。String path = file.getPath();// 将此抽象路径名转换为一个路径名字符串。//H:\Fileboolean absolute = file.isAbsolute();//是否为绝对路径File absoluteFile = file.getAbsoluteFile();//返回绝对路径boolean directory = file.isDirectory();// 测试此抽象路径名表示的文件是否是一个目录。是否为文件夹boolean file1 = file.isFile();//是否为文件boolean hidden = file.isHidden();//是否是一个隐藏文件。long length = file.length();//表示的 文件 的长度。String[] list = file.list();//返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录//如果是文件返回NullFile[] files = file.listFiles();//文件数组file.renameTo(new File("H:\\File"));//更名System.out.println(Arrays.asList(list));//[Wnjian.java]//文件创建File fil = new File("H:\\File\\wenjian");//代表硬盘上的一个文件或者目录boolean mkdir = fil.mkdir();//创建文件夹,前提是父级目录存在,创建多级目录用mkdirs.File fil_1 = new File("H:\\File\\te.txt");//代表硬盘上的一个文件或者目录fil_1.createNewFile();//创建文件,必须要父级目录存在}
}
递归:
package com.File_IO.Digui;import java.io.File;public class Main {public static void main(String[] args) {//递归int fbnq = fbnq(10);System.out.println(fbnq);//55//求和int sum = sum(100);System.out.println(sum);//5050//查看文件的所有文件printFile(new File("D:\\AdobeDownloadAssistant"));}//打印出这个文件夹下的所有文件public static void printFile(File file){if(!file.exists()){System.out.println("文件不存在!");return;}if(file.isFile()){System.out.println(file);return;}System.out.println(file);//打印本身File[] files = file.listFiles();//自己文件或目录if(files!=null || files.length>0){for (int i = 0; i < files.length; i++) {File file1 = files[i];printFile(file1);}}}//斐波那契数列 :从第三位开始,后一位是前两位之和//1 1 2 3 5 8 13 21public static int fbnq(int n){if(n == 1 || n==2){return 1;}return fbnq(n-1)+fbnq(n-2);}//求1-n整数的和public static int sum(int n){if(n==1){return 1;}int s = n+sum(n-1);return s;}}
二、I/O流
1.流的概念
- 流是一组有序的,有起点和终点的字节集合,是对计算机中数据传输的总称或者抽象
- 即数据在两个设备间的传输称为流,流的本质是数据传输。
- 流序列中的数据可以是没有进行加工的原始数据(二进制字节数据),也可以是经过编码的符合某种格式规定的数据,Java中提供了不同的流类对它们进行处理。
2.流的分类
按照流传输方向不同
- 输入流(InputStream)
- 输出流(OutputStream)
按照处理数据类型的不同
- 字节流
- 字符流
按照流的基本功能不同
- 节点流
- 过滤流
输入流(InputStream):
在Java中,程序可以打开一个输入流,输入流的信息源可以位于文件、内存或网络套接字(socket)等地方,信息源的类型可以是包括对象、字符、图像、声音在内的任何类型。一旦打开输入流后,程序就可从输入流串行地读数据。
输出流(OutputStream):
类似地,程序也能通过打开一个输出流并顺序地写入数据来将信息送至目的端。
①字节流:
字节流的概念
传输的数据单位是字节,也意味着字节流能够处理任何一种文件
字节流的组成
- 字节输入流 InputStream
- 字节输出流 OutputStream
import java.io.*;public class Zijie {public static void main(String[] args) throws Exception {//字节流输入流//创建FIle对象File file = new File("H:\\File\\a.txt");//创建流通到FileInputStream input = new FileInputStream(file);//读数据
// while (true) {// int read = input.read();
// if(read<0){// break;
// }
// System.out.println((char) read);
// }int c = -1;while ((c = input.read())>0){System.out.print((char)c);}//关闭input.close();//字节流输出流//创建File对象File fi = new File("H:\\File\\te.txt");FileOutputStream out = new FileOutputStream(fi);out.write(101);out.flush();//刷新out.close();//关闭}
}
将图片复制到另一个文件夹:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;public class Pictu {public static void main(String[] args) throws Exception {File file = new File("H:\\File\\xxx\\love-018.jpg");FileInputStream inp = new FileInputStream(file);File file1 = new File("H:\\File\\yyy\\love-018.jpg");if(!file1.exists()){file1.createNewFile();}FileOutputStream out = new FileOutputStream(file1);int len = -1;byte[] buffer = new byte[1024];while ((len = inp.read(buffer))>0){out.write(buffer,0,len);}out.flush();out.close();inp.close();}
}
②字符流:
InputStreamReader OutputStreamWriter
FileReader FileWriter
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;public class ZiFuliu {public static void main(String[] args) throws Exception{//字符流//创建Dile对象File file = new File("H:\\File\\a.txt");//创建字节流FileInputStream fis = new FileInputStream(file);//创建字符流InputStreamReader isr = new InputStreamReader(fis);int read = isr.read();System.out.println((char)read);//啊char[] buf = new char[5];int len = -1;while ((len = isr.read(buf))>0){System.out.print(new String(buf,0,len));
// System.out.print(buf);}isr.close();fis.close();}
}
将文件复制到另一个文件夹:
import java.io.*;public class WenBenZhuanYi {public static void main(String[] args) throws Exception{File file = new File("H:\\File\\a.txt");FileInputStream fis = new FileInputStream(file);InputStreamReader isr = new InputStreamReader(fis);File file1 = new File("H:\\File\\yyy\\a.txt");if(!file1.exists()){file1.createNewFile();}FileOutputStream fos = new FileOutputStream(file1);OutputStreamWriter osw = new OutputStreamWriter(fos);char[] buf = new char[1024];int len= -1;while((len = isr.read(buf))>0){osw.write(buf,0,len);}osw.flush();osw.close();fos.close();isr.close();fis.close();System.out.println("复制完成!");}
}
简单写法:
import java.io.FileReader;
import java.io.FileWriter;public class File_shur {public static void main(String[]args)throws Exception{//输入流FileReader fr = new FileReader("H:\\File\\yyy");fr.close();//输出流 append:ture 是否追加 是的FileWriter fw = new FileWriter("H:\\File\\yyy\\a.txt",true);fw.write("hello");fw.append("hello");fw.append("hello");fw.append("hello");fw.flush();fw.close();}
}
小结:
File file = new File(“H:\File\a.txt”); 创建File对象
FileInputStream fis = new FileInputStream(file);创建字节输入流
InputStreamReader isr = new InputStreamReader(fis);创建字符输入流
File file1 = new File(“H:\File\yyy\a.txt”);创建file对象
if(!file1.exists()){ 判断文件是否存在
file1.createNewFile();
}
FileOutputStream fos = new FileOutputStream(file1);创建字节输出流
OutputStreamWriter osw = new OutputStreamWriter(fos);创建字符输出流
osw.flush();刷新
osw.close();关闭
FileReader fr = new FileReader(“H:\File\yyy”); 输入流包含上面三个步骤
FileWriter fw = new FileWriter(“H:\File\yyy\a.txt”,true); 输出流包含上面三个步骤
③过滤流:
ObjectStream
ObjectInputStream
ObjectOutputStream
ObjectStream特点
writeObject()
readObject()
对象序列化
Data Stream
DataInputStream
readXxx();
DataOutputStream
writeXxx();
过滤流的开发步骤:
- 创建节点流
- 基于节点流创建过滤流
- 读/写数据
- 关闭外层流
DataOutputStream DataInputStream
package com.File_IO.GuoLvLiu;import java.io.*;public class Data_Stream {public static void main(String[] args)throws Exception {//过滤流//写//创建目标文件对象File file1 = new File("H:\\File\\a.txt");//创建字节输出流FileOutputStream fos = new FileOutputStream(file1);//字节过滤流通道DataOutputStream dos = new DataOutputStream(fos);dos.writeInt(97);dos.flush();dos.close();System.out.println("存储完成");//读File file2 = new File("H:\\File\\a.txt");FileInputStream fis = new FileInputStream(file2);DataInputStream dis = new DataInputStream(fis);int i = dis.readInt();System.out.println(i);dis.close();}
}
④字节数组输出流:
ByteArrayOutputStream
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;public class Butter {public static void main(String[] args) throws Exception {//缓存流File file = new File("H:\\File\\a.txt");FileInputStream fis = new FileInputStream(file);//字节数组输出流ByteArrayOutputStream baos = new ByteArrayOutputStream();//读byte[] a = new byte[10];int len = -1;while ((len = fis.read(a)) > 0) {baos.write(a, 0, len);
// System.out.print(new String(a,0,len));}baos.flush();fis.close();String s = baos.toString();System.out.println(s);//sajkdbafuiwqdjkscbjkscbsmbasf}
}
⑤字符流的过滤流 :
BufferedReader
PrintWriter
transient 关键字
序列化时注意事项
不要使用追加的方式写对象
如果一个对象的属性又是一个对象,则要求这个属性对象也实现了Serializable接口
BufferedReader
- 字符过滤流
- 提供了缓冲功能
- 可以一行一行的读取内容
public String readLine()
完整的字符输入流的开发步骤
- 创建节点流
- 桥转换为字符流
- 在字符流的基础上封装过滤流
- 读/写数据
- 关闭外层流
package com.File_IO.Duixiang;import java.io.*;public class Main {public static void main(String[] args)throws Exception {//字符流的过滤流File file =new File("H:\\File\\a.txt");FileInputStream fis = new FileInputStream(file);InputStreamReader isr = new InputStreamReader(fis);
//写 FileReader//字符流过滤流BufferedReader br = new BufferedReader(isr);// String s = br.readLine();//读取一行// System.out.println(s);String s =null;while((s = br.readLine())!=null){System.out.println(s);}br.close();
//读 FileWriterFileWriter fi = new FileWriter("H:\\File\\bb.txt");
// BufferedWriter dw = new BufferedWriter(fi);
// dw.write("sad");
// dw.newLine();//换行
// dw.flush();
// dw.close();//常用PrintWriter out = new PrintWriter(fi,true);//是否自动刷新 true 是out.println("asdadadfsdxvnxjvb");out.close();}
}
三、对象流以及对象的序列化
import java.io.*;public class DuiXiang {public static void main(String[] args) throws Exception {//对象流 输入输出流
//写File file = new File("H:\\File\\QQQ.txt");FileOutputStream fos = new FileOutputStream(file);ObjectOutputStream oos = new ObjectOutputStream(fos);//序列化 和反序列化 实现implements Serializable便可以实现序列化Student stu =new Student("张三",19);Student stu1 =new Student("ad",2);Student stu2 =new Student("adasd",4);oos.writeObject(stu);oos.writeObject(stu1);oos.writeObject(stu2);oos.flush();oos.close();//读File file1 = new File("H:\\File\\QQQ.txt");FileInputStream fit = new FileInputStream(file1);ObjectInputStream ois = new ObjectInputStream(fit);
// int len = 0;while (fit.available()>0){Object o = ois.readObject();System.out.println(o);}// Object o = ois.readObject();
// System.out.println(o);//Student{name='张三', age=19}ois.close();}
}
Java I/O流(File、字节流、字符流、过滤流、对象流)详解相关推荐
- lo流知识(字节流 字符流)
概述:lo流分为字节流字符流 字节流分为:输出流和输入流 输入流:从文件到控制台(把数据从其他设备输到内存中去)读操作 输出流:从控制台到文件(把数据从内存上输出到别的地方)写操作 按数据类型分: 字 ...
- java 输入流可以合并吗_Java 使用IO流实现大文件的分割与合并实例详解
java 使用IO流实现大文件的分割与合并 文件分割应该算一个比较实用的功能,举例子说明吧比如说:你有一个3G的文件要从一台电脑Copy到另一台电脑, 但是你的存储设备(比如SD卡)只有1G ,这个时 ...
- 川希:占卜命理怎么引流精准客户,日引200+算命粉详解!
川希:占卜命理怎么引流精准客户,日引200+算命粉详解! 如果你是做算命占卜命理类的,本文会对你线上引流获客有很大帮助,每天引流200多算命粉甚至更多不是问题,适合个人or公司团队批量放大操作.本引流 ...
- Java中常见RuntimeException与其他异常表及Exception逻辑关系详解
Java中常见RuntimeException与其他异常表及Exception逻辑关系详解 前言 常见`RuntimeException` 其他错误类型 `Error`类 `Exception`类 E ...
- java调用webservice_笃学私教:Java开发网站架构演变过程-从单体应用到微服务架构详解...
原标题:笃学私教:Java开发网站架构演变过程-从单体应用到微服务架构详解 Java开发网站架构演变过程,到目前为止,大致分为5个阶段,分别为单体架构.集群架构.分布式架构.SOA架构和微服务架构.下 ...
- java中北大学ppt总结+课后习题第四章(小宇特详解)
java中北大学ppt总结+课后习题第四章(小宇特详解) 继承 子类与父类 继承是根据现有类创建新的类的机制,由继承而得到的新类称为子类(subclass)或派生类(derived class),被继 ...
- Java调用SMSLib用单口短信猫发送短信详解
技术园地 当前位置:短信猫网站主页 > 技术园地 > [转载]Java调用SMSLib用单口短信猫发送短信详解 发布时间:2017/02/09 点击量:620 SMSLib是Apache的 ...
- 64位JVM的Java对象头详解
关注"Java艺术"一起来充电吧! 我们编写一个Java类,编译后会生成.class文件,当类加载器将class文件加载到jvm时,会生成一个Klass类型的对象(c++),称为类 ...
- IO流之字节流字符流理解
目录: 一.什么是IO流 : 二.流的分类: 三.字节流解析: 四.字符流解析: 五.序列流(合并流): 一.什么是IO流 简单说就是将数据(文本,音频,视频,图片等)以流的形式进行读写. 举个栗子 ...
- string转成对象_详解Java I/O流(五),对象序列化
对象序列化 什么是序列化和反序列化呢? 序列化就是将对象转成字节序列的过程,反序列化就是将字节序列重组成对象的过程. 在这里插入图片描述 为什么要有对象序列化机制 程序中的对象,其实是存在有内存中,当 ...
最新文章
- 2022-2028年中国塑料制品行业投资分析及前景预测报告(全卷)
- python中文版-Python中文版
- /etc/fstab自动挂载文件详解
- SessionListener失败,退出
- esxi服务器与虚拟机时间不符,vsphere6.7-虚拟机与ESXI时间同步
- BootstrapTable入门Demo
- 小熊的人生回忆(五)
- 问题 H: Search Problem (V)
- 谷歌地图离线包-尝试
- 串口通讯---实现 PC 端之间串口连接传输文件
- HD2500显卡驱动linux,英特尔HD Graphics 4000/2500 集成显卡驱动
- 有量纲和无量纲是什么意思_为什么无线通信需要同步?
- ubuntu下好用的录屏软件之Vokoscreen
- Jboot 跨域请求
- 多种文字翻译软件-翻译常用软件
- BUUCTF 打卡2
- 什么是粉红喜马拉雅盐,比普通盐更好吗?
- 雷达图+南丁格尔玫瑰图
- 后端ut测试(精选)
- [问题已处理]-阿里云服务器种了蠕虫病毒和恶意下载病毒处理
热门文章
- java web下载文件设置
- EZo UIBuilder 快速打造沪深股市实时行情
- vue多个关键字高亮
- HTML与CSS关系
- speedoffice表格中如何自动求和
- win10系统无法连接xp工作组计算机,win10如何访问xp共享文件|win10访问xp共享文件的设置方法...
- 创业冲突的五种解决方法是_当合伙人发生冲突时,最好的解决办法是什么?
- js愤怒的小鸟_愤怒的小鸟:每个级别的视频秘籍
- 解决win10系统中截图异常放大的问题 window10-win10 截图放大-缩放-问题解决办法
- SpringBoot-NutzDao