java I/O

一.文件/文件夹File
1.创建文件对象:
       new File("absolutePath/Path");
       new File(parentDir,fileName);
2.文件常用方法
     f.exists();
     f.isDirectory();
     f.isFile();
     f.length();
     f.lastModified();
     f.renameTo();
     f.list();
     File[] fs= f.listFiles();
     f.getParent();
     f.getParentFile();
     f.mkdir();
     f.mkdirs();
     f.createNewFile();
     f.listRoots();
     f.delete();
     f.deleteOnExist();
二.InputStream/OutputStream字节输入输出流
     FileInputStream/FileOutputStream
  示例代码
      try {
        // 准备文件lol2.txt其中的内容是空的
        File f = new File("d:/lol2.txt");
        // 准备长度是2的字节数组,用88,89初始化,其对应的字符分别是X,Y
        byte data[] = { 88, 89 };

        // 创建基于文件的输出流
        FileOutputStream fos = new FileOutputStream(f);
        // 把数据写入到输出流
        fos.write(data);
        // 关闭输出流
        fos.close();
           }
三.关闭流的方式
  1.在try中关闭
   如果文件不存在或者读取时出现问题将会转入catch语句导致关闭流的代码得不到执行
  2.在finally中关闭
     流的声明在try的外面(保证finally可以访问)+关闭之前判断是否为空+关闭时还需要再一次trycatch
 3.在try()括号中关闭
四.字符流Reader/Writer
    FileReader/FileWriter(这次用char数组来保存数据)
五.缓存流BufferedReader/PrintWriter,flush
  读取和写入都可以暂时保存到缓存中等缓存满了再输出,flush用于不用等缓存满了立马把数据写入硬盘    
  BufferedReader可以一次读取一行
    File f = new File("d:\dong");
    try( FileReader fr = new FileReader(f);
             BufferedReader bffR = new BufferedReader(fr)){
            while(true){
             String line = bffR.readLine();
                 if(null!=line)
                      sysout(line);
           }
         }   
六.数据流DataInputStream/DataOutputStream

要用DataInputStream 读取一个文件,这个文件必须是由DataOutputStream 写出的,否则会出现EOFException,因为DataOutputStream 在写出的时候会做一些特殊标记,只有DataInputStream 才能成功的读取

      File f =new File("d:/lol.txt");
         try (
            FileInputStream fis  = new FileInputStream(f);
            DataInputStream dis =new DataInputStream(fis);
    ){
        boolean b= dis.readBoolean();
        int i = dis.readInt();
        String str = dis.readUTF();
         
        System.out.println("读取到布尔值:"+b);
        System.out.println("读取到整数:"+i);
        System.out.println("读取到字符串:"+str);

    }




File f =new File("d:/lol.txt");
    try (
            FileOutputStream fos  = new FileOutputStream(f);
            DataOutputStream dos =new DataOutputStream(fos);
    ){
        dos.writeBoolean(true);
        dos.writeInt(300);
        dos.writeUTF("123 this is gareen");
    }
七.对象流

对象流指的是可以直接把一个对象以流的形式传输给其他的介质,比如硬盘

一个对象以流的形式进行传输,叫做序列化。 该对象所对应的类,必须是实现Serializable接口

八.System.in
  1. try (InputStream is = System.in;) {
        while (true) {
            // 敲入a,然后敲回车可以看到
            // 97 13 10
            // 97是a的ASCII码
            // 13 10分别对应回车换行
            int i = is.read();
            System.out.println(i);
        }
    } 

2.Scanner 可以读行/整数

        Scanner s = new Scanner(System.in);
         
        while(true){
            String line = s.nextLine();
            System.out.println(line);
           int a = s.nextInt();
        }

你可能感兴趣的:(java I/O)