Java中File类和I/O
- File 类
- 输入输出(I/O)
- 字节流与字符流
- 输入流与输出流
- 输入输出字节流
- 构造方法
- 方法
- InputStream 基本方法
- public int read() throws IOException
- public int read(byte[] buffer) throws IOException
- public void close() throws IOException
- OutputStream 基本方法
- public void write(int b) throws IOException
- public void write(byte[] b,int off,int len) throws IOException
- public void close() throws IOException
- 输入输出字符流(Reader Writer)
- Print流
- 对象输入输出流--对象序列化
- idea中设置 ,在类中生成序列化id
File 类
File类
是java.io包中很重要的一个类File类
的对象可以表示文件,还可以表示目录,在程序中的一个File类
对象可以代表一个文件或目录File对象
可以对文件或目录的属性进行操作,如:文件名,最后修改日期,文件大小等File对象
无法操作文件的具体数据,即不能对文件进行读或写的操作
File 构造方法
方 法 原 型 | 说明 |
---|---|
File (String pathname) |
指定文件(或目录)名和路径创建文件对象 |
//在当前目录先创建一个与aaa.txt文件名相关联的文件对象
File f1 = new File("aaa.txt");
//指明详细的路径以及文件名,请注意双斜线或用反斜杠
File f2 = new File("D:\\Java\\Hello.java");
//指明详细的路径以及目录名,请注意双斜线
File f3 = new File("D\\Java");
方法原型 | 说明 |
---|---|
boolean exists() |
判断文件是否存在 存在-true 不存在-false |
boolean isFile() |
判断是否为文件,是-true 不是-false |
boolean isDirectory() |
判断是否为目录,是目录-true 不是-false |
String getName() |
获取文件名称 |
long length() |
获取文件长度(字节数) |
boolean creatNewFile()throws IOException |
创建新文件,成功-true 失败false,有可能抛出IOException 异常,必须捕捉 |
boolean delete() |
删除文件,成功-true 失败-false |
public String[] list() |
将目录下的子目录以及文件的名字,返回到String数组 |
public Flie[] listFiles() |
将目录下的子目录以及文件的实例返回到File数组 |
输入输出(I/O)
- 输入输出(I/O)把电脑硬盘的数据读到程序中,称为输入,即
input
,进行数据的read操作
从程序往外部设备写数据,称为输出,即output
,进行数据的write操作
体系图
字节流与字符流
- 从数据流编码格式上划分为
- 字符流
- 字节流
输入流与输出流
流按着数据的传输方向分为:
- 输入流: 往程序中读叫输入流
- 字节流:从程序中往外写叫输出流
InputStream
和OutputStream
的子类都是字节流,可以读写二进制文件,主要处理音频图片,歌曲,字节流,处理单元为 一个字节Reader
和Writer
的子类都是字符流 主要处理字符或字符串,字符流处理的单元为 一个字符. 字节流将读取到的字节数据,去指定的编码表中获取对应文字字符
字节流中常用的类
- 字节输入流
FIleInputStream
- 字节输出流
FileOutputStream
- 字节输入流
字符流的常用类
- 字符输入流
FileReader
- 字符输出流
FileWriter
- 字符输入流
输入输出字节流
构造方法
FileInputStream in =new FileInputStream("D:\\777\\新建 文本文档.txt");//括号里面也可以是File对象
FileOutputStream out = new FileOutputStream("D:\\aaaa.c");////括号里面也可以是File对象
方法
InputStream 基本方法
public int read() throws IOException
- 读取一个字节并以整数的形式返回(0~255),如果返回-1,已到输入流的末尾
public int read(byte[] buffer) throws IOException
- 读取一系列字节并存储到一个数组buffer,返回实际读取的字节数,如果读取前已到输入流的末尾,返回-1
public void close() throws IOException
- 关闭流,释放内存资源
OutputStream 基本方法
public void write(int b) throws IOException
- 向输出写入一个字节数据,该字节数据位参数b的低8位
public void write(byte[] b,int off,int len) throws IOException
- 将一个字节类型数组中的从指定位置(off)开始到len个字节写入输出流
public void close() throws IOException
- 关闭流释放内存资源
实际使用
public class StreamDemo {
public static void main(String[] args) throws IOException {
FileInputStream in =new FileInputStream("D:\\777\\新建 文本文档.txt");
FileOutputStream out = new FileOutputStream("D:\\aaaa.c");
// System.out.println(in.read()); //每read一次返回一个字节编码 读完返回-1
//
// System.out.println(in.read());
/*
int read() 默认一次读一个字节,返回的是读到的字节编码 返回效率低
int read(byte[] b) 默认一次读一个指定大小的byte个字节 返回的数组中一次实际
装入的字节个数
*/
int t;
while((t=in.read())!=-1){
out.write(t);
}
int size;
byte[] b = new byte[10000];
while((size=in.read(b))!=-1){
out.write(b,0,size);//从0开始读,读到文件字节长度,比直接write(b)节省空间
}
//关闭流对文件的占用
in.close();
out.close();
}
}
DataOutputStream
与DataInputStream
也属于输入输出字节流,与FIleOutputStream
,FileInputStream
区别:前者的输入输出是以原始数据类型
为基本单位输入输出(char ,int ),后者则是以字节
为单位进行读写DataOutputStream
与DataInputStream
底层还是对字节的处理
输入输出字符流(Reader Writer)
构造方法
File file =new File("D:/777/888/999/新建 文本文档.txt");
Reader read = new FileReader(file);
//....还有其他多种构造对象方法
Writer writer = new FileWriter(file);
方法
方法与上面方法名与用法一样,区别:Reader与Writer只能处理纯字符的文件!!!!
Print流
- Print 打印流
- 只做输出没有输入 打印流分为字节打印流和字符打印流
PrintWrite
- 字符打印流 print 方法可以打印各种类型数据
- 在javaweb 项目中,服务器端相应数据以打印流的方式响应
对象输入输出流--对象序列化
序言:对象的寿命通常随着生成该对象的程序终止而终止,有时候,可能需要将对象的状态保存下来,在需要时候再将对象恢复
对象的序列化可以形象地比喻为将一个对象从内存中“拍成照片”,并将其存储在可以持久化的存储设备(如磁盘)上。当需要还原这些数据时,可以通过反序列化的过程,将这些照片重新“冲洗”出来,并还原成原始对象
- 对象的输入输出流
- 主要作用:用于写入对象信息与读取对象信息,对象信息一旦写到文件上那么对象的信息就可以做到持久化
- 对象输出流
ObjectOutputStream
- 对象输入流
ObjectInputStream
- 当然也有对应的读写方法
readObject()
方法读取一个对象writeObject
方法将对象保存到输出流
- 对象输出流
- 对象的输出流将制定的对象写入到文件的过程中,就是将对象序列化的过程
- 对象的输入流将指定序列化好的文件读出来的过程,就是将对象反序列化
- 对象的输出流将对象写入到文件中称为对象的序列化, 所以被序列化的对象必须要实现
Serializable
接口,Serializable
接口中没有任何方法. 当一个类声明实现Serializable
接口后,表明该类可被序列化
private static final long serialVersionUID = -5974713180104013488L
- 随机生成 唯一的
serialVersionUID
用来表明实现序列化类的不同版本间的兼容性. 某个类在与之对应的对象已经序列化出去后做了修改,该对象依然可以被正确的反序列化 - 如果不显示生成序列号,那么将会隐式生产,但隐式生成后,类一旦发生改变,序列号也会随之变化
transient 关键字
- 默认情况下当执行了对象序列化的时候会将类中的全部属性的内容进行全部的序列化操作但是很多情况下有一些属性并不需要序列化处理,这个时候就可以在属性的定义上使用
transient
关键字;来完成了 private transient String name;
idea中设置 ,在类中生成序列化id
Java中File类和I/O的更多相关文章
- java中File类的常用方法总结
java中File类的常用方法 创建: createNewFile()在指定的路径创建一个空文件,成功返回true,如果已经存在就不创建,然后返回false. mkdir() 在指定的位置创建一个此抽 ...
- Java 中File类的createNewFile()与createTempFile(), delete和deleteOnExit区别
1. Java 中File类的createNewFile()与createTempFile()的区别 最近,在看代码时看到了一个方法, File.createTempFile() ,由此联想到File ...
- Java中File类的基本用法
File类的基本用法 java.io.File类:代表文件和目录.在开发中,读取文件.生成文件.删除文件.修改文件的属性时经常会用到此类. File类的常用构造方法:public File(Strin ...
- java中File类的使用
public class FileLei { public static void main(String[] args) throws IOException { //..表示上 ...
- java中File类的相关学习
File类 1.关于系统路径分割符. 在Windows中,使用反斜杠“\”作为路径分割符,比如“c:\test”,但是java中反斜杠表示转义,所以需要用“C:\\test”在程序中来表示路径.还可以 ...
- java中File类的常用所有方法及其应用
创建:createNewFile()在指定位置创建一个空文件,成功就返回true,如果已存在就不创建,然后返回false.mkdir() 在指定位置创建一个单级文件夹.mkdirs() 在指定位置 ...
- java中File类中list()和listFiles()方法区别
list()和listFiles()方法区别: 1.返回值类型不同:前者为String数组,后者为File对象数组 2.数组中元素内容不同:前者为string类型的[文件名](包含后缀名),后者为Fi ...
- Java中File类总结
/** * @Title:JavaFile.java * @Package:com.yhd.chart.model * @Description:File类测试 * @author:Youhaidon ...
- Java中File类的方法详解
File类也是Java中一个比较重要的类,通过他我们可以实现对文件的一系列操作,其内置了很多方法,下面我将按方法的功能分块,逐一讲解: 快速导航 构造方法 常用方法 创建目录 判断 `is...` t ...
- Java中File类
File类是java.io包中唯一代表磁盘文件本身的对象.File类的对象主要用来获取文件本身的一些信息,如文件所在目录.文件长度.读写权限等. 一. 文件的创建与删除 通常使用以下三种方法来创建一个 ...
随机推荐
- JDBC数据库汇总Attack研究
前言 针对除Mysql的其它数据库的jdbc attack分析 H2 RCE 介绍 H2 是一个用 Java 开发的嵌入式数据库,它本身只是一个类库,即只有一个 jar 文件,可以直接嵌入到应用项目中 ...
- Mac搭建appium环境及python运行代码示例
Appium主要是通过调用安卓提供的接口来执行命令的,所以需要安装Java和安卓SDK. 1.安装Appium服务端 appium的服务端是基于node的,直接使用npm(node包管理器)安装即可, ...
- 【Oracle】PL/SQL制作唯一标识,固定字段+日期+流水码,流水码每日重置
[Oracle]PL/SQL制作唯一标识,固定字段+日期+流水码,流水码每日重置 首先创建序列 create sequence sequence_name minvalue 0 maxvalue 99 ...
- 力扣1235(java)-规划兼职工作(困难)
题目: 你打算利用空闲时间来做兼职工作赚些零花钱. 这里有 n 份兼职工作,每份工作预计从 startTime[i] 开始到 endTime[i] 结束,报酬为 profit[i]. 给你一份兼职工作 ...
- 力扣5(java)-最长回文串(中等)
题目: 给你一个字符串 s,找到 s 中最长的回文子串. 示例 1: 输入:s = "babad"输出:"bab"解释:"aba" 同样是符 ...
- C++ 访问说明符详解:封装数据,控制访问,提升安全性
C++ 访问说明符 访问说明符是 C++ 中控制类成员(属性和方法)可访问性的关键字.它们用于封装类数据并保护其免受意外修改或滥用. 三种访问说明符: public:允许从类外部的任何地方访问成员. ...
- 测试环境不稳定&复杂的必然性及其对策
简介: 为什么测试环境的不稳定是必然的,怎么让它尽量稳定一点?为什么测试环境比生产环境更复杂,怎么让它尽量简单一点?本文将就这两点进行分享.同时,还会谈一谈对测试环境和生产环境的区别的理解. 作者 | ...
- Spark如何对源端数据做切分?
简介: 典型的Spark作业读取位于OSS的Parquet外表时,源端的并发度(task/partition)如何确定?特别是在做TPCH测试时有一些疑问,如源端扫描文件的并发度是如何确定的?是否一个 ...
- STM32的半主机与MicroLIB机制
一.半主机模式 半主机机制的作用 半主机是作用于ARM目标的一种机制,可以将来自STM32单片机应用程序的输入与输出请求传送至运行仿真器的PC主机上.使用此机制可以启用C库中的函数,如printf() ...
- B/S 结构系统的 缓存机制(Cookie) 以及基于 cookie 机制实现 oa 十天免登录的功能
B/S 结构系统的 缓存机制(Cookie) 以及基于 cookie 机制实现 oa 十天免登录的功能 @ 目录 B/S 结构系统的 缓存机制(Cookie) 以及基于 cookie 机制实现 oa ...