数据流
什么是数据流:统一管理数据的的写入和读取。
数据流分类:
输入流:将外部设备的数据读取到内存中
输出流:将内存中的数据写到外部设备(硬盘,光盘等)中
输入流分类:
1.字节输入流:InputStream(抽象类) ->实际操作的对象FileInputStream
//读取字节内容
FileInputStream fis=new FileInputStream(file);//把file所指的文件里的数据写入到输入流fis
byte[] name=new byte[6];//自定义的字节缓冲区
fis.read(name);//把输入流fis里的数据读取到name中,这样就完成了数据从文件到内存的过程
fis.close();//关闭输入流fis
System.out.println(new String(name));//把name转换成字符
2.字符输入流:Reader(抽象类) ->实际操作的对象FileReader
//读取字符内容
FileReader fr=new FileReader(file) ;
char[] book=new char[2];
fr.read(book);
fr.close();
System.out.println(book);
3.对象输入流:ObjectInputStream(实际对象)
//向文件读取一个对象到内存中(输入流)
FileInputStream is=new FileInputStream(file);//把file的内容写入输入流对象is里
ObjectInputStream ois=new ObjectInputStream(is);//把is的东西写入ois里
person xw1=(person)ois.readObject();//把ois的内容付给对象xw1
Ps:如果想将一个对象写入一个文件,该对象就必须implements Serializab(必须要实现Serializab这个接口,也就是序 列化),如果该对象的内部还有其他的属性对象,则属性对象也要序列化
输出流分类
1.字节输出流 OutputStream(抽象类) ->实际操作的对象FileOutputString
//1.向文件写入字节数据(创建输出流对象)
FileOutputStream fos=new FileOutputStream(file);
//2.调用Write方法写入
byte[] text={'1','2','3','4'};
fos.write(text);
//操作完毕要关闭输出流对象
fos.close();
2.字符输出流Writer(抽象类) ->实际操作的对象FileWriter
//1.向文件写入字符数据(创建输出流对象)
FileWriter fw=new FileWriter(file);
char[] name1={'安','卓'};
fw.write(name1);//把字符数组name1里的字符数据写入了file所指的文件
fw.close();//关闭输出流
3.对象输出流ObjectInputStream(实际对象)
FileOutputStream os=new FileOutputStream(file);//把输出流对象os的数据写入里file
ObjectOutputStream oos=new ObjectOutputStream(os);//把oos的数据写入os里
oos.writeObject(xw);//把xw这个对象写入oos里
oos.close();//关闭输出流对象oos
文件的创建
//创建文件 完整路径
String path="D:\\myJava\\java\\src\\main\\java\\Day9";
File file=new File(path.concat("\\1.txt"));//在path下创建一个名为1.txt的文件
//判断是否存在
if (file.exists()==false)
{
//不存在就创建
file.createNewFile();
}
小代码程序
/**
- 图案解锁
- 文件写入 文件读取
- 第一次运行:
- 设置密码:6位
- 从终端一次输入一个整数
- 确认密码
- 设置过了 3次错误的机会
- 检查密码:相同提示解锁成功 不同就提示密码不一致 重新输入
*/
package Day9;
import java.io.IOException;
public class NNclass {
public static void main(String[] args) throws IOException {
System.out.println("请设置密码");
setpassworld setting=new setpassworld();
setting.settin();
}
}
package Day9;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
public class setpassworld {
public setpassworld()
{
}
public void settin() throws IOException {
//创建文件夹,将其写入
String path="D:\\myJava\\java\\src\\main\\java\\Day9";
File file=new File(path.concat("\\3.txt"));
//判断是否存在
if (file.exists()==false) {
//不存在就创建
file.createNewFile();
}
boolean ishava=false;
while (ishava!=true)
{
// FileInputStream is=new FileInputStream(file);
// byte[] name=new byte[2];
// int count=is.read(name);
// is.close();
if (file.length()!=0)//文件夹不为空说明已经不是第一次登陆
{
ishava=true;
Scanner in=new Scanner(System.in);
//取出文件中的密码
FileReader iis=new FileReader(file);//提取字符流
char[] number=new char[6];
iis.read(number);
String t2=new String(number);
boolean isright=true;
int wrongTime=0;
System.out.println("请输入6位的密码。");
while (isright)
{
String a=in.nextLine();
boolean is=a.equals(t2);
if (is==false)
{
++wrongTime;
if (wrongTime!=3)
System.out.println("密码错误,请重新输入");
else
{
System.out.println("密码错误次数过多,退出");
isright=false;
}
}
else
{
System.out.println("解锁成功");
isright=false;
}
}
}
else
{
System.out.println("请设置6位的密码。");
Scanner in=new Scanner(System.in);
// char[] t=new char[6];
// for (int i=0;i<6;++i)
// {
// t[i]= (char) in.nextInt();
// }
String t=in.nextLine();
//把设置的密码存入文件中
FileWriter os= new FileWriter(file);//存入字符流
//byte[] number=new byte[6];
os.write(t);
os.close();
}
}
}
}