Java基础之IO

File类

File文件类只能对文件本身操作,不能对文件中的内容进行操作。

  public File(String pathname);构造方法。

  boolean createNewFile() throws IOException; 创建新的文件
  boolean mkdir() 创建目录
  boolean mkdirs() 创建多层目录
  boolean delete():删除文件或目录
  Boolean exists():判断文件或目录是否存在。
  boolean isFile(): 判断是否为文件
  boolean isDirectory():判断是否为目录

  String[] list(): 列出指定目录下所有的文件或文件夹的名称。
  File[] listFile(): 列出指定目录下所有文件或目录对象。

  String getName():得到文件或目录的名称
  String getPath():得到文件或目录的相对路径.
  String getAbsolutePath():得到文件或目录的绝对路径

编写一个方法遍历某个目录下所有的文件。(面试题) 一定要用方法的递归(方法内部调用自己)。
//列出指定目录下所有的文件
public static void fun(File file){//要查询的目录
//判断file是目录还是文件
if(file.isFile()){
  System.out.println("该文件所在的绝对路径:"+file.getAbsolutePath());
}else{
//2.获取该目录下所有子文件和子目录对象
  File[] childFiles=file.listFiles();
  if(childFiles!=null){
    for(File f:childFiles){//a b a.txt
      fun(f); //调用方法自己
      }
    }
  }
}

1.上面的File类只能对文件进行操作,不能对文件中的内容进行操作。
使用IO流来对文件中的内容进行操作。都是站在程序的角度
1.根据流的方法分为:
输入流和输出流
2.根据读取的单位。
字节流和字符流

1.字符输入流Reader和字符输出流Writer。 通过文件发现这两个类都是抽象类,该类无法实例化对象,找它的子类FileReader。
FileReader(File file);
FileReader(String path);

2.FileReader 字符输入流。读取文件的内容以字符的形式来读取。
  File file=new File("D://a.txt");
  FileReader fr=new FileReader(file);
  int i=fr.read();//每次读取一个字符,返回读取的字符对应的ASSIC值。
  while(i!=-1){
    char c=(char)i;
    System.out.println(c);
    i=fr.read();
  }

3.以字符数组的方式来读取
  File file=new File("D://a.txt");
  FileReader fr=new FileReader(file);
  char[] cs=new char[1000];
  int i=fr.read(cs);//
  while(i!=-1){
    String str=new String(cs,0,i);//把cs字符数组转化为字符串,从数组中第一个元素,转化i个字符
    System.out.println(str);
    i=fr.read(cs);
}

4.Writer:FileWriter();字符输出流,通过程序向文件写入内容
  File file=new File("D://a.txt");
  FileWriter fw=new FileWriter(file,true); //没有自动会建。 true:是否运行追加
  String str="I am fine ";
  fw.write(str); //
  //fw.flush();//刷新FileWrite中内容。
  fw.close();

字节流:
InputStream 和 OutputStream 这两个类为字节输入和输出的父类。这两个类也是抽象类。这两个类不能创建对象,需要使用子类来完成。
FileInputStream FileOutputStream

FileOutputStream:字节输出流
  File file=new File("D://d.txt");
  FileOutputStream fos=new FileOutputStream(file,true);//字节输出流
  String str="你好!玛德";
  byte[] b=str.getBytes();//把str转化为字节数组
  fos.write(b);//write(byte[] b)
  fos.close();//关闭

FileInputStream:字节输入流
  File file=new File("D://d.txt");
  FileInputStream fis=new FileInputStream(file);
  byte[] bytes=new byte[10];
  int i= fis.read(bytes);
  while(i!=-1){
    String str=new String(bytes,0,i);
    System.out.println(str);
    i=fis.read(bytes);
  }
  fis.close();

处理流:

字符的处理流:

  BufferedWriter字符输出的处理流

  BufferedWriter:字符输出的处理流
  BufferedWriter(Writer out) :这是它的构造方法。
    FileWriter fw=new FileWriter("D://c.txt");
    BufferedWriter bw=new BufferedWriter(fw,true); //升级。
    bw.write("Hello Word");
    bw.flush();
    bw.newLine(); //产生换行,可以应用于任何系统。
    bw.close();

  BufferedReader字符输入的处理流 

  Reader r=new FileReader("笔记.txt");
    BufferedReader br=new BufferedReader(r);
    String line=br.readLine();// 可以读取一行。
    while(line!=null){
      System.out.println(line);
      line=br.readLine();
    }
    br.close();

字节的缓存流: 

  BufferedOutputStream:字节输出流的缓存流。
  BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("D://e.txt"));
    String str="Hello Good";
    byte[] bytes=str.getBytes();
    bos.write(bytes);
    bos.close();

  BufferedInputStream:字节输入流的缓存流
  BufferedInputStream bis=new BufferedInputStream(new FileInputStream("D://e.txt"));
    byte[] b=new byte[20];
    int i= bis.read(b);
    while(i!=-1){
      String str=new String(b,0,i);
      System.out.println(str);
      i= bis.read(b);
    }
    bis.close();

对象流:

对象流:(重要) 通过该流可以把Java中的对象进行保存(文件,云盘,网络上)。
ObjectInputStream 和 OjbectOutputSteam:

序列化(Serialize): 用ObjectOutputStream类将一个Java对象通过IO流写入到数据源中
public static void main(String[] args) throws Exception
{
  OutputStream os=new FileOutputStream("D://a.txt");
  ObjectOutputStream oos=new ObjectOutputStream(os);

  //注意:该类People 必须实现Serializable接口。
  // 该类中所有要序列化的属性的类型必须也实现Serializable接口

  People p=new People("张三",19);
  oos.writeObject(p); //把一个对象通过ObjectOutputStream写入到数据源

  oos.close();
  os.close();
}


反序列化(Deserialize):用ObjectInputStream类从数据源中恢复该Java对象。
public static void main(String[] args) throws Exception
{
  ObjectInputStream ois=new ObjectInputStream(new FileInputStream("D://a.txt"));
  Object o=ois.readObject(); //获取该文件中的对象
  People p=(People)o; //向下转型
  System.out.println(p.getName()+"=====>"+p.getAge()+"----->");//toString();
  ois.close();
}

原文地址:https://www.cnblogs.com/zjc364259451/p/11194449.html