IO

创建文件

File类

  • exists():判断是否存在该文件

  • createNewFile():创建新的文件

  • mkdir():创建文件夹

  • mkdirs():创建多层文件夹

  • isFile():判断是否是文件

  • getPath():获取文件相对路径

  • getAbsolutePath():获取文件绝对路径

  • getName():获取文件名

  • length():获取文件大小(字节)

//创建文件对象  通过路径
File file = new File("d:/test.txt");
// 会报异常,必须做出处理
try{
    if(!file.exists){//判断文件是否存在
        file.createNewFile();//不存在创建新文件
    }
}catch(IOException e){
    e.printStackTrace();
}
​
File file2 = new File("D:Student/stu/c");​
file2.mkdir();//只能创建单层文件夹
file2.mkdirs();//能够创建多层文件夹

IO流

io流体系.jpg

流不释放资源的话会使数据在内存中,文件并不会有改动,一定要关闭流释放资源

输入

方法

  • read():读取文件内容

  • close():关闭流,释放资源

  • 读取文件内容

    • InputStream输入字节流:处理文件
 FileInputStream file = null;
 try{
      //创建输入流的对象 读取的文件是谁
      FileInputStream file = new FileInputStream("text.txt");
      int b= 0;
      while(b=file.read!=-1){//read()返回ASCII表的编码
          System.out.println((char)b);//强转成字符
      }
 }catch(FileNotFoundException e){
      e.printStackTrace();
 }catch(IOException e){
      e.printStackTrace();
 }finally{
      try{
          file.close();//关闭流,释放资源,如果多个流对象,先用的后释放
      }catch(IOExption e){
          e.printStackTrace();
      }
 }
 ​
*   **Reader输入字符流**:处理文本

``` java
try{
     fr = new FileReader("D:/test.txt");
     char[] ch = new char[100];
     int len = fr.read(ch);
     String s = new String(ch, 0, len);
     Sysout.out.println(s);
}catch(IOException e){
     e.printStackTrace();
}finally{
     try{
         fr.close();
     }catch(IOException e){
         e.printStackTrace();
     }
}

    缓冲流

  ```java
    try{
         //构造方法需要一个Reader类的输入流
         br = new BufferedReader(new FileReader("D:/我的青春我做主.txt"));
         String s="";
         StringBuilder sb = new StringBuilder();
         while((s=br.readLine())!=null){
             sb.append(s+"\n");
         }
     //StringBuilder类中的替换方法是根据索引来替换,String类中有更好用的replace方法,所以使用toString方法转换成String类型
         s=sb.toString().replace("###","sss");
         System.out.println(s);
    }catch(FileNotException e){
         e.printStackTrace();
    }catch(IOException e){
         e.printStackTrace();
    }finally{
         try{
             br.close();
         }catch(IOException e){
             e.printStackTrace();
         }
    }

输出

方法

  • write():写入文件内容

  • close():关闭流,释放资源

  • 写入文件内容

    • OuputStream输出字节流:处理文件
   try {
       //第二个参数默认false,重写文件内容,true是追加到其后
       fileOutputStream = new FileOutputStream("test.txt",true);
       String s = "国庆小长假";
       fileOutputStream.write(s.getBytes());//把字符串转化为字节数组的类型,会重写文件内容
   } catch (FileNotFoundException e) {
       e.printStackTrace();
   } catch (IOException e) {
       e.printStackTrace();
   }finally {
       try {
           fileOutputStream.close();
       } catch (IOException e) {
           e.printStackTrace();
       }
   }
  • Writer输出字符流:处理文本

    • flush():将内存中的数据刷新到文件中去
  try{
         fw = new FileWrite("D:/我的青春我做主.txt");
         fw.write("我的青春我做主");
         fw.flush();
  }catch(FileNotException e){
         e.printStackTrace();
  }catch(IOException e){
         e.printStackTrace();
  }finally{
         try{
               fw.close();
         }catch(IOException e){
               e.prntStackTrace();
         }
  }
  • 缓冲流和BufferdeReader类似

字节流是8为通用字节流,字符流是16为Unicode字符流

  • 字节流转字符流
 FileInputStream fis = new FileInputStream("D:/我的青春我做主.txt");
 InputStreamReader reader = new InputStreamReader(fis,"编码格式");
 //转换后同字符流相同
  • 打印输出字符流
     PrintWrite pw = new PrintWrite("stu.txt");
     pw.println("好好学习");//换行
     pw.print("天天向上");//非换行

序列化和反序列化操作对象

序列化

把Java对象转成二进制字节序列

如果要把对象转为二进制字节序列,需要实现Serializable

序列化多个对象时把对象存放到集合中去序列化

public class User implements Serializable{

}
public class ObjectOutputStreamDemo001{
    public static void main(String[] args){
        ObjectOutputStream oos = null;
        User user = new User();
        try{
            oos = new ObjectOutputStream(new FileOutputStream("User.txt"));
            oos.wriatObject(user);
        }catch(FileNotException e){
            e.printStackTrace();
        }catch(IOException e){
            e.printStackTrace();
        }finally{
            try{
                oos.close();                
            }catch(IOException e){
                e.printStackTrace();
            }

        }
    }
}

反序列化

把二进制字节序列转成对象

反序列化集合中的多个对象使用集合存放

public class ObjectInputStreamDemo001{
    public static void main(String[] args){
        ObjectInputStream oos = null;
        User user = null;
        try{
            ois = new ObjectInputStream(new FileInputStream("User.txt"));
            user=ois.readObject(user);
        }catch(FileNotException e){
            e.printStackTrace();
        }catch(IOException e){
            e.printStackTrace();
        }finally{
            try{
        ois.close();                
            }catch(IOException e){
                e.printStackTrace();
            }
        }
    }
}

你可能感兴趣的:(IO)