1.相关概念
读取文件的 内容
I O流
流的方向:参考的是自己的内存空间
输出流:从内存空间将数据写到外部设备(磁盘\硬盘\光盘)
输入流:将外部数据写到内存中
流:统一管理数据的写入和读取 开发者只需要将内存里面的数据写到 流里面
输出流:开发者只需要 将内存里面的数据写到流里面
输入流;或者从流里面读取数据
输出流:OutputStream字节流 Writer字符流
输入流:InputStream字节流 Reader 字符流
I/O流对象 不属于内存对象 需要自己关闭
Outputtream和InputStream是抽象类 不能直接使用
FileOutputtream/FileInputStream
ObjectOutputtream/ObjectInputtream
FileWriter/FileReader
2.向文件写入数据
(1)字节流
1.创建文件输出流对象
FileOutputStream fos=new FileOutputStream(file);
2.调用Writer方法写入
byte[]text={'1','2','3','4'};
fos.write(text);
3,操作完毕要关闭stream对象
fos.close();
(2)字符流
FileWriter fw=new FileWriter(file);
char[] name ={'安','卓','开','发'};
fw.write(name);
fw.close();
3.读取内容
FileInputStream fis=new FileInputStream(fi
byte[]name1=new byte[12];
int count=fis.read(name1);
fis.read(name1);
fis.close();
System.out.println(new String(name1));
FileReader fr=new FileReader(file);
char[] book=new char[4];
count=fr.read(book);
fr.close();
System.out.println(new String(book));
4.向一个文件里面 存一个对象
序列化
保存的对象必须实现Serializable接口
如果对象内部还有属性变量是其他类的对象 那这个类也必须实现Serializable 接口
(1)主程序里:
//创建文件
String path ="/Android studio java/day/day1/src/main/java/swu/hsl/day8";
//path\\1.txt
File file=new File(path.concat("/1.txt"));
if(file.exists()==false){
//不存在就创建
// try {
file.createNewFile();
// }catch (IOException e){
// System.out.println("IO异常了");
// }
}
Dog wc=new Dog();
wc.name="旺财";
Person xw=new Person();
xw.age=20;
xw.name=("小王");
xw.dog=wc;
OutputStream os =new FileOutputStream(file);
ObjectOutputStream oos=new ObjectOutputStream(os);
oos.writeObject(xw);
oos.close();
//从文件里面读取一个对象
InputStream is =new FileInputStream(file);
ObjectInputStream ois=new ObjectInputStream(is);
Person xw = (Person)ois.readObject();
System.out.println(xw.name+""+xw.age+xw.dog.name);
ois.close();
(2)定义的类:
public class Person implements Serializable {
String name;
int age;
Dog dog;
}
class Dog implements Serializable{
String name;
}
5.将一个文件copy到另外一个位置
long start=System.currentTimeMillis();
String sourcepath="C:\\Users\\Day\\Desktop\\鬼刀\\QQ图片20190523212913.jpg";
String despath="C:\\Users\\Day\\Desktop\\word\\3.jpg";
InputStream is =new FileInputStream(sourcepath);
BufferedInputStream bis =new BufferedInputStream(is);
OutputStream os=new FileOutputStream(despath);
BufferedOutputStream bos=new BufferedOutputStream(os);
byte[]in=new byte[1024];
while(true) {
int count = bis.read(in);
if(count!=-1){
//读取到内容了
//将这次读取到的内容写入目标文件
bos.write(in,0,count);
}else {
break;
}
}
bis.close();
bos.close();
long end=System.currentTimeMillis();
System.out.println(end-start);
6.密码解锁的demo
(1)
public class Myclass {
public static void main(String[] args){
boolean logined =false;
//判断是否已经登录
String password = FileOperation.instance.password;
if (password != null){
logined = true;
}
//提示用户操作
String alert;
if (logined) {
alert = "请输入密码";
} else {
alert = "请设置密码";
}
System.out.println(alert);
String firt = null;
int wrongTime = 3;
while (wrongTime > 0) {
//接收用户输入
Scanner scanner = new Scanner(System.in);
String inputPassword = scanner.next();
//判断操作
if (logined) {
//已经登陆过 直接比较
if (password.equals(inputPassword)) {
System.out.println("解锁成功");
break;
} else {
System.out.println("解锁失败 请重新输入");
wrongTime--;
}
}else{
//没有登陆过 在设置密码
//判断是设置密码的第一次还是第二次
if (firt == null){
//第一次 保存第一次输入的密码
firt = inputPassword;
System.out.println("请确认密码 ");
}else{
//第二次 比较两次输入的密码是否相同
if (firt.equals(inputPassword)){
System.out.println("设置密码成功");
//保存设置的密码
FileOperation.instance.save(firt);
break;
}else{
System.out.println("两次密码不一致 请重新设置密码:");
firt = null;
wrongTime--;
}
}
}
scanner.nextLine();
}
}
}
(2)
public class FileOperation {
public static final String PATH="C:\\Users\\Day\\Desktop\\word\\1.txt";
String password;
public static final FileOperation instance = new FileOperation();
private FileOperation(){
try {
load();
}catch (IOException e){
}
}
public void load() throws IOException {
FileInputStream fis = new FileInputStream(PATH);
byte[] pwd = new byte[4];
int count = fis.read(pwd);
if (count == -1){
password = null;
}else{
password = new String(pwd);
}
fis.close();
}
public void save(String password){
try {
FileOutputStream fos = new FileOutputStream(PATH);
fos.write(password.getBytes());
fos.close();
} catch (IOException e){
System.out.println("io异常");
}
}
}
7.心得体会
今天关于文件的学习还是能够吸收,下来过后得好好把上课讲的知识稳固一下加深影响,这一节的内容很重要不能知其然不知其所以然,继续加油 前路仍漫漫