1.File类概述
常用方法
package com.imooc.file;
import java.io.File;
import java.io.IOException;
public class FileDemo {
public static void main(String[] args) {
//创建File对象
File file1 = new File("c:\\imooc\\io\\score.txt");
//判断是文件还是目录
System.out.println("是否是目录:"+file1.isDirectory());
System.out.println("是否是文件:"+file1.isFile());
//创建目录
File file2 = new File("c:\\imooc\\set\\HashSet");
if(!file2.exists()) {//判断目录是否存在
file2.mkdirs();//mkdir加s表示添加多级目录
}
//创建文件
if(!file1.exists()) {//判断文件是否存在
try {
file1.createNewFile();
}catch(IOException e) {
e.printStackTrace();
}
}
}
}
2.绝对路径与相对路径
返回上一级目录:…\
-
isAbsolute() 判断路径是绝对路径还是相当路径,true绝对路径,false相对路径
-
getPath() 获取相对路径
-
getAbsolutePath() 获取绝对路径
-
getName()获取文件名字
3.字节流
字节流
1、字节输入流:InputStream
- 体系
2、字节输出流:OutputStream
- 体系
4.FileInputStream
FileInputStream
常用方法
- public int read() 从输入流中读取一个数据字节
- public int read(byte[] b) 从输入流中将最多b.length个字节的数据读入一个byte数组中
- public int read(byte[] b,int off,int len) 从输入流中将最多len个字节的数据读入byte数组中
- public void close() 关闭此文件输入流,并释放与此流有关的所有系统资源
如果返回值为-1,则表示已经达到文件末尾!
使用
案例1
package com.imooc.file;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class FileInputDemo1 {
public static void main(String[] args) {
//创建一个 FileInputDemo1对象
try {
FileInputStream fis = new FileInputStream("C:\\Users\\吴秀祥\\eclipse-workspace\\IOProj\\imooc.txt");
// int n = fis.read();
int n = 0;
// while(n!=-1) {
// System.out.print((char)n);
// n=fis.read();
// }
while((n=fis.read())!=-1) {//注释代码简写式
System.out.println((char)n);
}
System.out.println((char)n);
fis.close();//关闭资源
} catch (FileNotFoundException e) {
//
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}
}
}
案例2
package com.imooc.file;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class FileInputDemo1 {
public static void main(String[] args) {
//创建一个 FileInputDemo1对象
try {
FileInputStream fis = new FileInputStream("C:\\Users\\吴秀祥\\eclipse-workspace\\IOProj\\imooc.txt");
// int n = fis.read();
int n = 0;
// while(n!=-1) {
// System.out.print((char)n);
// n=fis.read();
// }
while((n=fis.read())!=-1) {//注释代码简写式
System.out.println((char)n);
}
System.out.println((char)n);
fis.close();//关闭资源
} catch (FileNotFoundException e) {
//
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}
}
}
5.FileOutputStream
FileOutputStream文件输出流
主要作用:写入数据
常用方法
public void write(int b)//将指定字节写入此文件输出流
public void write(byte[] b)//将b.length个字节从指定byte数组写入此文件输出流中
public void write(byte[] b,int off,int len)//将指定byte数组中从偏离量off开始的len个字节写入此文件输出流
public void close()//关闭此文件输出流并释放与此流有关的所有系统资源
案例1:基本使用
package com.imooc.file;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileOutputDemo {
public static void main(String[] args) {
//声明
FileOutputStream fos;//输入流
FileInputStream fis;//输出流
try {
fos = new FileOutputStream("C:\\Users\\吴秀祥\\eclipse-workspace\\IOProj\\imooc.txt",true);//true代表覆盖写入
fis = new FileInputStream("C:\\Users\\吴秀祥\\eclipse-workspace\\IOProj\\imooc.txt");
fos.write(50);
fos.write('a');
System.out.println(fis.read());
System.out.println((char)fis.read());
fos.close();
fis.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}
}
}
案例2:文件拷贝
package com.imooc.file;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileOutputDemo1 {
public static void main(String[] args) {
//文件拷贝
try {
FileInputStream fis = new FileInputStream("C:\\imooc\\Demo.jpg");
FileOutputStream fos = new FileOutputStream("C:\\imooc\\Democopy.jpg");
int n = 0;
byte[] b = new byte[1024];
while((n=fis.read(b))!=-1) {
fos.write(b,0,n);//参数0和n是为了保证拷贝前后文件大小一致
}
fis.close();
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}
}
}
6.缓冲流
缓冲流
为什么要使用缓冲流?
答:提高文件的读取和写入速度(普通流是从硬盘读取数据,而缓冲流是通过内存)
案例
package com.imooc.file;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class BufferedDemo {
public static void main(String[] args) {
try {
//输出流
FileOutputStream fos = new FileOutputStream("C:\\imooc\\imooc.txt");//写操作
BufferedOutputStream bos = new BufferedOutputStream(fos);
//输入流
FileInputStream fis = new FileInputStream("C:\\\\imooc\\\\imooc.txt");
BufferedInputStream bis = new BufferedInputStream(fis);
//使用缓冲流对象进行写入
bos.write(50);
bos.write('a');
//清空缓冲区,否则无法写入
bos.flush();//也可以使用close()方法,二者选其一
//把读取到的数据进行输出
System.out.println(bis.read());
System.out.println((char)bis.read());
//关闭所有流
fos.close();
bos.close();
fis.close();
bis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
}
}
7.字符流
字符流
字符输入流类结构图
字符输出流类结构图
字节流:主要操作二进制数据,如图片之类的
字符流:主要运用于文字
8.字节字符转换流
字节字符转换流
package com.imooc.file;
//输入流的使用
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class ReaderDemo {
public static void main(String[] args) {
try {
//读数据部分
FileInputStream fis = new FileInputStream("C:\\imooc\\imooc.txt");
InputStreamReader isr = new InputStreamReader(fis);
//写数据部分
FileOutputStream fos = new FileOutputStream("C:\\imooc\\newimooc.txt");//文件没有,java会自动创建
OutputStreamWriter osw = new OutputStreamWriter(fos);
//读取数据
//方法1
System.out.println("----方法1读取数据-----");
int n = 0;
char[] cbuf = new char[10];
while((n=isr.read())!=-1) {
System.out.println((char)n);
}
//方法2
System.out.println("----方法2读取数据-----");
while((n=isr.read(cbuf))!=-1) {
String s = new String(cbuf,0,n);
System.out.println(s);
}
//写入数据
while((n=isr.read(cbuf))!=-1) {
//String s = new String(cbuf,0,n);
osw.write(cbuf,0,n);
osw.flush();//osw.flush()也可以写在循环外面
}
//关闭流
fis.close();
fos.close();
isr.close();
osw.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
9.其他字符流
package com.imooc.file;
import java.io.BufferedReader;
import java.io.BufferedWriter;
//输入流的使用
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class ReaderDemo {
public static void main(String[] args) {
try {
//读数据部分
FileInputStream fis = new FileInputStream("C:\\imooc\\imooc.txt");
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader br = new BufferedReader(isr);
//写数据部分
FileOutputStream fos = new FileOutputStream("C:\\imooc\\newimooc.txt");//文件没有,java会自动创建
OutputStreamWriter osw = new OutputStreamWriter(fos);
BufferedWriter bw = new BufferedWriter(osw);
//读取数据
//方法1
System.out.println("----方法1读取数据-----");
int n = 0;
char[] cbuf = new char[10];
while((n=br.read())!=-1) {
System.out.println((char)n);
}
//方法2
System.out.println("----方法2读取数据-----");
while((n=br.read(cbuf))!=-1) {
String s = new String(cbuf,0,n);
System.out.println(s);
}
//写入数据
while((n=br.read(cbuf))!=-1) {
//String s = new String(cbuf,0,n);
bw.write(cbuf,0,n);
bw.flush();//osw.flush()也可以写在循环外面
}
//关闭流
fis.close();
fos.close();
isr.close();
osw.close();
br.close();
bw.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
10.对象的序列化与反序列化
对象的序列化与反序列化
对象序列化
步骤:
- 创建一个类,继承Serializable接口
- 创建对象
- 将对象写入文件
- 从文件读取对象信息
涉及到的类:
- 对象输出流:ObjectInputStream
- 对象输出流:ObjectOutputStream
序列化和反序列化
- 序列化:把Java对象转换为字节序列的过程
- 反序列化:把字节序列恢复为Java对象的过程
案例
Goods类
package com.imooc.file;
import java.io.Serializable;
public class Goods implements Serializable{
private String goodsId;
private String goodsName;
private double price;
public Goods(String goodsId,String goodsName,double price){
this.goodsId=goodsId;
this.goodsName=goodsName;
this.price=price;
}
public String getGoodsId() {
return goodsId;
}
public void setGoodsId(String goodsId) {
this.goodsId = goodsId;
}
public String getGoodsName() {
return goodsName;
}
public void setGoodsName(String goodsName) {
this.goodsName = goodsName;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
@Override
public String toString() {
return "商品信息 [编号:" + goodsId + ", 名称:" + goodsName
+ ", 价格:" + price + "]";
}
}
GoodsTest类
package com.imooc.file;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class GoodsTest {
public static void main(String[] args) {
// 定义Goods类的对象
Goods goods1 = new Goods("gd001", "电脑", 3000);
try {
FileOutputStream fos = new FileOutputStream("C:\\imooc\\imooc.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
FileInputStream fis = new FileInputStream("C:\\\\imooc\\\\imooc.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
// 将Goods对象信息写入文件
oos.writeObject(goods1);
oos.writeBoolean(true);
oos.flush();
// 读对象信息
try {
Goods goods = (Goods) ois.readObject();
System.out.println(goods);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(ois.readBoolean());
fos.close();
oos.close();
fis.close();
ois.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}