Day14文件的相关操作及demo

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.心得体会

今天关于文件的学习还是能够吸收,下来过后得好好把上课讲的知识稳固一下加深影响,这一节的内容很重要不能知其然不知其所以然,继续加油 前路仍漫漫

你可能感兴趣的:(Day14文件的相关操作及demo)