java基础-文件与IO


以下内容为本人的学习笔记,如需要转载,请声明原文链接 https://www.cnblogs.com/lyh1024/p/16772853.html


IO是一个庞大的体系,信息传递的通道靠IO,例如:文件读写、上传下载、网络通信等都要用到。

1.File类的基本概念

File类:表示文件和目录路径名的抽象表示形式

File类可以实现文件的创建、删除、重命名、得到路径、创建时间等等。是唯一与文件本身有关的操作类

File类的操作方法

Method说明
public static final String separator表示路径分隔符“ \ ”
public File(String pathname)构造File类实例,要传入路径
public boolean createNewFile()创建新文件
public boolean delete()删除文件
public boolean isDirectory()判断给定的路径是否是文件夹
public boolean isFIle()判断给定的路径是否是文件
public String[] list()列出文件夹中的文件
public File[] listFiles()列出文件夹中的所有文件
boolean mkdir()创建新的文件夹
public boolean renameTo(File dest)为文件重命名
public long length()返回文件大小
String getPath()路径名字符串
/**File类的使用*/public static void main(String[] args){//File类表示一个文件或目录//“c:\\test\\vince.txt"//"c:/test/vince.txt"File f1 = new File("C:/test/vince.txt");  if(!f1.exists()){    //判断f1指向的文件是否存在    try{      f1.createNewFile();//创建文件      System.out.println("文件创建成功")     }catch(IOException e){      e.printStackTrace();     }   }  //f1.isFile()是否为文件  System.out.println("是否为文件夹:"+f1.isDirectory());    File f2 = new File("c:\\test\\my");  boolean b = f2.delete();//delete()只能删除空文件夹  System.out.println(b);    String[] names = f2.list();//列出当前目录下的所有文件名  System.out.println(Arrays.toString(names);              File[] fs = f2.listFiles();//列出当前目录下的所有文件,以file对象返回  for(File f : fs){    System.out.println("length="+f.length());    System.out.println("name="+f.name());    System.out.println("相对路径path="+f.path());    System.out.println("绝对路径getAbsolutePath="+f.getAbsolutePath());    System.out.println("是否为隐藏文件="+f.isHidden());    System.out.println("是否可读文件="+f.canRead());    System.out.println("文件最后修改的时间="+f.lastModified());    System.out.println("-------------“);​   }   File f3 = new File("temp.txt");   System.out.println(f3.getPath());   System.out.println(f3.getAbsolutePath());​   File f4 = new File("c:\\test\\dabin");   f4.mkdirs();   //重命名与移动文件              //f4.renameTo(new File("C:\\test\\dabin1"))    f4.renameTo(new File("c:\\dabin1"));              File f5 = new File("c:\\test\\my");     // File[] files = f5.listFiles(new FileFilter(){  //   public boolean accept(File pathname){  //     return pathname.getName().endsWith(".txt");  //  }  //  }) ;   File[] files = f5.listFiles((pathname)->pathname.getName().endsWith(".txt"));   System.out.println("-------");   for(File f: files){     System.out.println(f.getName());   }           }

示例

/**在指定的目录中查找文件*/public class FileDeom2{    public static void main(String[] args){        findFile(new File("c:\\Users\\vince\\Downloads"),".jpg");    }  //查找文件的方法  private static void findFile(File target,String ext){    if(target==null)return;    //如果文件是目录    if(target.isDirectory()){      File[] files = target.listFiles();      if(files!=null){        for(File f : files){          findFile(f,ext);//递归调用,一层层找,层数太深,会溢出         }       }     }else{      //此处表示File是一个文件      String name = target.getName().toLowerCase();      if(name.endsWith(ext)){        System.out.println(target.getAbsolutePath());       }     }   }}

2.字节流2.1 IO流概述

IO流:输入输出流(Input/Output)

流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流

流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。

2.2 IO流的分类

根据处理数据类型的不同分为:字符流和字节流

根据数据流向不同分为:输入流和输出流

字节是数据传输的基本单位,文件内容以字节为单位存储

读文件叫输入流,从文件中把数据读到程序使用输入流

写文件叫输出流,从程序中把数据写到文件使用输出流

2.3 字节输出流

OutputStream类定义

  • public abstract class **OutputStream**extends Object implements Closeable,Flushable

此抽象类是表示输出字节流的所有类的超类。输出流接受输出字节并将这些字节发送到InputStream类某个接收器,要向文件中输出,使用FileOutputStream类

2.4 字节输入流

InputStream定义:

  • public abstract class **InputStream**extends Object implements Closeable

此抽象类是表示字节输入流的所有类的超类

FileInputStream从文件系统中的某个文件中获得输入字节

/**字节输出输入流输出流:超类OutputStream,对文件的输出流使用子类FileOutputStream输入流:超类InputStream,对文件的输入流使用子类FileInputStream*/public class ByteStreamDemo{​  private static void in\(){        //1、确定目标文件    File file = new File("c:\\test\\vince.txt");        //2.构建一个文件输入流对象    try{      InputStream in = new FileInputStream(file);    //3.声明StringBuilder      StringBUilder buf = new StringBuilder();    //4.声明数组和长度      byte[] bytes = new byte[1024];//1024个字节      int len = -1 ;//表示每次读取的字节长度,-1表不存在    //5.把数据读入到数组中并返回读取的字节数,当不等-1时,表示读取到数据,等于-1表示文件已经读完      while(len = in.read(bytes)!= -1 ){    //6.根据读取到的字节数组,再转换为字符串内容,添加到StringBilder中        buf.append(new String(bytes));       }    //7.打印内容      System.out.println(buf);    //8.关闭输入流      in.close();     }catch (FileNotFoundException e){      e.printStackTrace();        }catch(IOException e){      e.printStackTrace();     }      private static void out(){        //1、确定目标文件    File file = new File("c:\\test\\vince.txt");        //2.构建一个文件输出流对象    try{      OutputStream out = new FileOutputStream(file);//每一次执行会覆盖      //OutputStream out = new FileOutputStream(file,true);//append为true表示追加内容​      //3.输出的内容是      String info = "疑是银河落九天\r\n";//在windows里'\r\n'表示换行      //String line = System.getProperty("line.separator");//获取换行符      //4.把内容写入到文件      out.write(info.getBytes())//不能传字符,要转换成字节      //5.关闭流      out.close();      System.out.println("write success...");     }catch (FileNotFoundException e){      e.printStackTrace();     }catch(IOException e){      e.printStackTrace();     }    }    public static void main(String[] args){        out();    in();    }}

有待补充…….

2022-10-09 17:07:42