1. File类
2. 输入及输出的概念
3.输入流与输出流
4.字节流与字符流
5.输入输出节点字节流
6.节点流与处理流
7.输入输出节点字符流
8.Print流
9.对象输入输出流
File类
File类是java.io包中很重要的一个类;
File类的对象可以表示文件,还可以表示目录,在程序中一个File类对象可以代
表一个文件或目录;
File对象可以对文件或目录的属性进行操作,如:文件名、最后修改日期、文件
大小等;
File对象无法操作文件的具体数据,即不能直接对文件进行读/写操作。
File的方法:
File file=new File("C:/a");//文件夹
File file1=new File("C:/a.txt");//文件
System.out.println(file1.canWrite());//是否可以写入
System.out.println(file1.exists());//文件是否存在
System.out.println(file1.getAbsoluteFile());//读取文件地址
System.out.println(file1.isHidden());//文件是否为隐藏模式
System.out.println(file1.isDirectory());//判断是否是目录L
System.out.println(file1.isFile());//是否为文件
System.out.println(file1.lastModified());//返回文件最后一次修改的时间
System.out.println(new Date(1695977021944L));//将long类型的实践转化为date
输入输出的概念
输入输出(I/O) 把电脑硬盘上的数据读到程序中,称为输入,即input,进行数据 的read 操作从程序往外部设备写数据,称为输出,即output,进行数据的write 操作
字节流与字符流
从数据流编码格式上划分为
字节流:
字符流
输入流与输出流
流按着数据的传输方向分为:
输入流:往程序中读叫输入流。
输出流:从程序中往外写叫输出流。
InputStream和OutputStream的子类都是字节流 可以读写二进制文
件,主要处理音频、图片、歌曲、字节流,处理单元 为1个字节。
Reader和Writer的子类都是字符流 主要处理字符或字符串,字符流处
理单元为1个字符。 字节流将读取到的字节数据,去指定的编码表中获取
对应文字字符。
字节流与字符流
字节流中常用类
字节输入流 FileInputStream
字节输出流 FileOutputStream
字符流中常用类
字符输入流 FileReader
字符输出流 FileWriter
输入输出字节流
InputStream
的基本方法
读取一个字节并以整数的形式返回(0~255),如果返回-1已到输入流的末尾。
读取一系列字节并存储到一个数组buffer, 返回实际读取的字节数,如果读取前已到输入流的
末尾返回-1
关闭流释放内存资源
OutputStream
的基本方法
向输出流中写入一个字节数据,该字节数据为参数b的低8位
将一个字节类型的数组中的从指定位置(off)开始的 len个字节写入到输出
关闭流释放内存资源
节点流与处理流
根据封装类型不同流又分为
节点流 处理流
节点流:
如果流封装的是某种特定的数据源,如文件、字符串、字符串数组等,
则称为节点流。
处理流:
如果流封装的是其它流对象,称为处理流。 处理流提供了缓冲功能,
提高读写效率,同时增加了一些新的方法
节点流与处理流
节点流中常用类
字节输入流 FileInputStream
字节输出流 FileOutputStream
字符输入流 FileReader
字符输出流 FileWriter
处理流中常用类
缓冲字节输出流 BufferedOutputStream
缓冲字节输入流 BufferedInputStream
缓冲字符输入流 BufferedReader
缓冲字符输出流 BufferedWriter
输入输出字符流
Reader 的基本方法
读取一个字符并以整数的形式返回, 如果返回-1已到输入流的末尾。
读取一系列字符并存储到一个数组buffer, 返回实际读取的字符数,如果读取前
已到输入流的末尾返回-1
Writer 的基本方法
向输出流中写入一个字符数据,该字节数据为参数b的16位
一个字符类型的数组中的数据写入输出流
将一个字符类型的数组中的从指定位置(off set)开始的 length个字符写入到
输出流
Print流
Print 打印流:
只做输出没有输入 打印流分为字节打印流和字符打印流
PrintWriter:
字符打印流 print方法可以打印各种类型数据
在javaweb项目中,服务器端向客户端响应数据以打印流的方式响应
对象输入输出流--对象序列化
对象的寿命通常随着生成该对象的程序的终止而终止。 有时候,可能需
要将对象的状态保存下来,在需要时再将对象恢复。
对象的输入输出流 :
主要的作用是用于写入对象信息与读取对象信息。 对象信息 一旦写到文
件上那么对象的信息就可以做到持久化了.
对象的输出流:ObjectOutputStream
对象的输入流:ObjectInputStream
在ObjectInputStream 中用readObject()方法可以直接读取一个对象,
ObjectOutputStream中用writeObject()方法可以直接将对象保存到输
出流中。
对象的输出流将指定的对象写入到文件的过程,就是将对象序列化的过
程.
对象 的输入流将指定序列化好的文件读出来的过程,就是对象反序列化
的过程。
对象的输出流将对象写入到文件中称之为对象的序列化,所以被序列化
对象的类必须要实现 Serializable接口。 Serializable接口中没有任何
方法。当一个类声明实现Serializable接口后, 表明该类可被序列化。
在类中可以生成一个编号
private static final long serialVersionUID = -5974713180104013488L;
随机生成 唯一的 serialVersionUID 用来表明实现序列化类的不同版本
间的兼容性。某个类在与之对应的对象已经序列化出去后做了修改,该
对象依然可以被正确反序列化.
如果不显示生成序列号,那么将会隐式生产,但是隐式生成后,类一旦发生
改变,序列号也会随之改变
IO样例:
package newhomework4;
import java.io.*;
import java.util.Scanner;
public class ZhuCeDengLu {
/* 4.实现注册,登录。
输入1 进入注册功能,输入2进入登录功能,输入3退出
用户信息:账号(account),密码(password)
(1)注册功能:输入用户账号信息,保存到文件。 user.txt
文件中的内容格式为:(一个用户信息占一行)
account=123;password=123
account=321;password=123
account=456;password=123
account=789;password=123
(2)登录:输入用户的账号,密码信息,与文件中的每行用户信息比较,判断登录是否成功.*/
public static void main(String[] args) throws IOException {
while(true){
System.out.println("---------请选择功能---------");
System.out.println("---------1:注册输入---------");
System.out.println("---------2:进入登录---------");
System.out.println("---------3:退出----------");
Scanner scanner=new Scanner(System.in);
int a=scanner.nextInt();
switch (a){
case 1:
zhuce();break;
case 2:
denglu();break;
case 3:
System.out.println("退出成功");
return;
}
}
}
//注册
public static void zhuce() throws IOException {
FileWriter fileWriter=new FileWriter("C:/a/user.txt");
BufferedWriter bufferedWriter=new BufferedWriter(fileWriter);
System.out.println("请输入账号:");
Scanner scan=new Scanner(System.in);
int account=scan.nextInt();
System.out.println("请输入密码");
int password=scan.nextInt();
bufferedWriter.write("account="+account+";"+"password="+password);
bufferedWriter.newLine();
bufferedWriter.flush();//刷新缓冲区
bufferedWriter.close();
}
//登录
public static void denglu() throws IOException {
FileReader fileReader=new FileReader("C:/a/user.txt");
BufferedReader bufferedReader=new BufferedReader(fileReader);
System.out.println("请输入账号:");
Scanner scan=new Scanner(System.in);
int account=scan.nextInt();
System.out.println("请输入密码:");
int password=scan.nextInt();
String s="account="+account+";"+"password="+password;
boolean a=true;
while(true){
if(s.equals(bufferedReader.readLine())){
System.out.println("账号密码正确");
a=false;
break;
}
}
if(a){
System.out.println("密码账号输入有误");
}
bufferedReader.close();
}
}