Java高级(四)Java的IO

Java高级(四)Java的IO

1.了解输入输出的概念

之前的概念中:

Scanner 输入

System.out.print(); 输出

所谓的输入和输出都是相对于程序来提出的概念
I/O
input output

2.使用file操作文件或者目录

什么是文件:相关记录或者放在一起的数据集合

文件的后缀名有:

  • .java
  • .class
  • .txt
  • .ppt
  • java.io.File

①boolean exists()判断文件或目录是否存在
delete只能删除空文件夹
如何删除非空文件夹:一个一个删【考试内容递归】

小知识:

commons-io(apache子项目)的使用
apache(阿帕奇基金会) commons是apache基金会下的一个子项目(它里面都是一些通用的代码)例如:文件上传,文件复制,连接池 加密处理 io是commons子项目下的一个 组件 里面写的都是通用的IO操作

3.Java I/O

持久化存储:介质
来自文件,内存,键盘的数据叫做数据源
程序是操作处理数据的
文件,内存,控制台数据汇
数据源→程序→数据汇
I input 输入
O output 输出
操作文件:相关记录或放在一起的数据的集合

4.File类 →创建文件对象

创建文件对象→物理文件或目录
File file=new File(String pathnane)路径格式:E:\myFile\hellow.txt

File类常用的方法

  • exists()判断文件或目录是否存在
  • String getPath()返回此对象表示的文件的相对路径名
  • boolean delete只能删除空文件夹
  • isFile() 判断是否是文件
  • String getAbsolutePath()返回此对象表示的文件的绝对路径名
  • boolean createNewFile();创建文件
  • isDirectory() 判断是否是目录
  • String getName();获取文件名
  • long length();获取文件大小
  • String[] list(); 获取当前目录下所有文件的名字
  • File[] listFiles(); 获取当前目录下的所有文件

相对路径:当前位置继续往下找
绝对路径:从盘符开始出发的

5.java程序写或读文件

流:通过流来读写文件,流是一组有序的数据序列,以先进先出的方式发送信息的通道

InputStream 输入流 来自数据源的数据流

OutputStream 输出流 流向目的地的数据流
站在程序的角度,输入流(InputStream)读数据,输出(OutputStream)流写数据
java流的分类

按流向区分

输出流 OutputStream和Writer作为基类

输入流 InputStream和 Reader作为基类

按照处理数据单元划分

字节流 InputStream OutputStream(抽象类) 1英文字母=1字节

字符流 Reader Writer 1汉字=2字节 一个字节16位,为了快速高效的读取文本文件

【字节输入流】InputStream类的常用的方法(抽象类)子类为【FileInputStream】类
int 1.read()/2.(byte[] b)/3.(byte[] b,int off,int len)
1.把数据源的数据以字节的形式读入,之后会把字节对应的整数形式返回
2.从输入流读取若干个字节,把这些字节保存到数组b中,返回的是读取到的字节数
3.从输入流读取若干个字节,把这些字节保存到数组b中,off指的是:字节数组中开始保存数据的起始下标
len指读取的字节数目,返回的是读取到的字节数

  • void close();关闭字节流
  • int available();读取字节数目
  • FileInputStream类常用的构造方法
  • FileInputStream(File file)传一个文件
  • FileInputStream(String pathname) 传了一个路径

【字节输出流】写OutputStream类的常用方法(抽象类)子类为【FileOutputStream】类
void Write 1.(int c) 2.(byte[] buf) 3.(byte[] b,int off,int len)

  • void close();
  • void flush(); 强制把缓冲区的数据写到输出流中。
  • FileOutputStream的构造方法*
  • FileOutputStream(File file)
  • FileOutputStream(String path)
  • FileOutputStream(String path,boolean appehd)可以指定覆盖或者追加文件

【字符输入流】读Reader
Reader类常用的方法

  • int read()
  • int (char[] c)
  • int (char[] c,int off,int len)
  • void close()

FileReader(Reader的子类)

  • new FileReader(File file)
  • new FileReader(String pathname)

【中文】】乱码!!
原因:文件编码格式 和 程序环境的编码格式不一致
解决方案:
字符流去读取文件的时候,按照指定字符流格式读FileReader 无法指定编码格式,会按照文件系统默认编码格式读 是reader类的子类

FileReader的父类InputStreamReader的构造方法 可以指定字符编码格式

1.InputStreamReader(FileInputStream fis)//需要一个字节流
2.InputStreamReader(FileInputStream fis ,String 字节编码格式)//需要一个字节流,一个字节编码格式

  1. 字符流:缓冲流BufferedReader:
  2. BufferedReader(Reader reader)构造方法
  3. readerLine();读取方法

【字符输出流】写 Writer抽象类子类为 FileWriter Writer(String)

  • close()
  • flush()清空缓存

**OutputStreamWriter类:可以指定字符编码格式OutputStreamWriter的构造方法 **

1.OutputStreamReader(FileOutputStream fos)//需要一个字节流
**2.OutputStreamReader(FileOutputStream fos ,String 字节编码格式)//需要一个字节流,一个字节编码格式 **

FileWriter类

以下两种构造方法都可以重载,制定一个boolean类型的参数,来追加或者覆盖源文件

  • new FileWriter(File file)
  • new FileWriter(String path)
  • BufferedWriter 带缓冲区的输出流,读取并且复制一个文件的内容,变化并写入另一个文件
  • BufferedReader 字符流读取,需要一个Reader参数
  • FileInputStream 字节输入流
  • InputStreamReader 读取 需要一个输入流参数
  • FileWriter 写入文件
  • BufferedWriter 字符写入文件 需要一个Writer参数

二进制文件的读写
输入流

DataInputStream dis=null;
FileInputStream fis=null;
fis=new FileInputStream("");
dis=new DataInputStream(fis);

输出流

DataOutputStream dos=null;
FileOutputStream fos=null;
fos=new  FileOutputStream("");
dos=new DataOutputStream(fos);
int temp
while ((temp=dis.read())!=-1){
	dos.write(temp);
		 }                     		 

6.序列化与反序列化

把对象变成流就是序列化 把对象从流里面取出来就是反序列化
ObjectInputStream 反序列需要FileInputStream对象做参数
readObject(fis);
ObjectOutputStream 序列化需要FileOutputStream对象做参数
writeObject(对象);
常见错误:

NOtserializableException:类没有实现Serializable接口,不可被序列化
transient屏蔽某些敏感字段的序列化

7使用反射机制

Java反射机制是指在运行状态中,动态获取信息以及动态调用对象方法的功能。
Java反射有三个动态性质
1.运行时生成对象实例
2.运行期间调用方法
3.运行时更改属性
Java反射常用API
使用Java反射技术常用的类如下:
Class类:反射的核心类 ,反射所有的操作都是围绕该类生成的。通 过Class类,可以获取类的属性,方法等内容信息。

<font size=4>**Field类表示类的属性,可以获取和设置类中属性的值**</font>
<font size=4>**Method类,表示类的方法,可以用来获取类中方法的信息,或者执行方法。**</font>
<font size=4>**Constructor类:表示类的构造方法**</font>

Java程序中使用反射的基本步骤如下:
1.导入java.lang.reflect.*
2.获得需要操作的类的Java.lang.Class对象
3.调用Class的方法获取 Field Method 对象);
4.使用反射API进行操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值