欢迎光临散文网 会员登陆 & 注册

java初识IO流及File类详解

2022-08-21 08:55 作者:虚云幻仙  | 我要投稿

/**
* 初识IO流
* 输入流input/reader,数据从数据源到程序。输出流output/writer,数据从程序到目的地。输入输出是相对程序而言
* 字节流stream结尾,以字节为单位获取数据。字符流reader/writer结尾,以字符为单位获取数据,字符char为2字节unicode
* 节点流,直接从数据源或目的地读写数据的流。处理流/包装流,不直接连接数据源/目的地,对流进行处理/包装的流
*/

public class firstIO {
   //使用FileInputStream和FileOutputStream进行文件读写操作
   //类结尾Stream代表字节流,input代表输入流,output代表输出流,file代表操作对象为文件,即以字节为单位对文件进行访问的流,直接连接文件/数据源所以是节点流

   public static void main(String[] args) {
       String path = firstIO.class.getClassLoader().getResource("").getPath()+"testIO.txt";
       System.out.println(path);
       //路径为"/C:/Users/86158/IdeaProjects/projectDIVA/out/production/iostream/testIO.txt"
       //.getResource()得到的是编译后的class文件所在位置的路径,在out目录下而非当前正在编写的java文件所在路径

       try (FileOutputStream fos = new FileOutputStream(path)){
           //try-with-resource包裹io操作
           fos.write(97);
           //传入int类型,转化为字节存储,当通过文本的方式读取时才会转换显示为字符
           fos.write(100);
           fos.write(103);
           //Stream字节流是以字节为单位,存取的字符只能为0-255即对应ASCII码
           fos.write(355);
           //当超过byte范围会溢出,355-256=99对应字符c
           //作为文本文件打开时内容为“adgc”

       }catch (Exception e){
           //catch处理异常
           e.printStackTrace();
       }

       try(FileInputStream fis = new FileInputStream(path)){
           for (int i = fis.read();i!=-1;i = fis.read()){
               //FileInputStream类的.read()为向后读取一个字节/8位二进制数,读到字节时会返回十进制数值,返回值类型为int,作为文本读取需要(char)手动转换为字符,当文件读完、向后读不到字节时返回-1
               System.out.print((char) i);
               //文件中的换行符也会被读取到,所以不需要println换行
               //结果为adgc

           }
       }catch (Exception e){
           e.printStackTrace();
       }

       File f = new File("iostream/testFile.txt");
       //File文件类 将文件/目录转换为对象的包装类,对文件/目录包装之后可以调用File类内的方法
       //创建File对象需要指定绝对路径或相对路径 new File("")默认生成当前项目目录下的路径

       System.out.println(f.getName());
       //.getName()只返回文件名,不包含路径 结果为testFile.txt
       System.out.println(f.getPath());
       //.getPath()返回创建File对象时传入的路径,如果创建时传入的是绝对路径则返回绝对路径,如果传入的是相对路径则返回相对路径 结果为iostream\testFile.txt
       System.out.println(f.getAbsolutePath());
       //.getAbsolutePath()返回绝对路径 结果为C:\Users\86158\IdeaProjects\projectDIVA\iostream\testFile.txt
       System.out.println(f.exists());
       //查询文件/目录f是否存在,结果为false
       try {
           System.out.println(f.createNewFile());
           //.createNewFile()创建新文件(非目录),如果路径中某级不存在或者已存在同名文件或目录(含后缀的目录)则创建失败返回false,创建成功返回true
       } catch (IOException e) {
           throw new RuntimeException(e);
       }
       System.out.println(f.delete());
       //删除文件f,如果不存在则返回false,这里删除只会删除testFile.txt文件,目录树C:\Users\86158\IdeaProjects\projectDIVA\iostream不会删除,因为目录iostream是File("C:\Users\86158\IdeaProjects\projectDIVA\iostream")而不是C:\Users\86158\IdeaProjects\projectDIVA\iostream\testFile.txt
       System.out.println(f.isFile());
       //查询f是否为文件,当没有同名文件或者f为目录时返回false
       System.out.println(f.length());
       //返回文件的字节数,即文件大小,结果为0,f为空文件
       System.out.println(f.isHidden());
       //判断文件f是否为隐藏文件,hidden隐藏的,结果为false
       System.out.println(f.isDirectory());
       //查询f是否为目录,不存在或f为文件时返回false,结果为false
       System.out.println(f.mkdir());
       //创建目录f,当路径中某级不存在或者f为文件或者目录f已存在时返回false,结果为false
       System.out.println(f.mkdirs());
       //创建目录树f,当路径中某级不存在时创建这些中间路径,f为文件或者已存在目录f时返回false,结果为false
       File f2 = f.getParentFile();
       //.getParentFile()返回上一级目录的File对象
       System.out.println(f2.getPath());
       //结果为iostream,因为f使用相对路径创建,所以f2也为相对路径创建
       System.out.println(f.getParent());
       //.getParent()返回上一级的路径字符串,结果为iostream和f2.getPath()相同
       String[] fileList = f2.list();
       //.list()返回目录f2下的所有文件名
       System.out.println(Arrays.toString(fileList));
       //结果为[iostream.iml, src, testFile.txt],返回文件名不包含路径
       File[] files = f2.listFiles();
       //.listFiles()返回目录f2下的所有文件的File对象
       System.out.println(Arrays.toString(files));
       //结果为[iostream\iostream.iml, iostream\src, iostream\testFile.txt],直接打印File对象时.toString返回.getPath()
   }
}

java初识IO流及File类详解的评论 (共 条)

分享到微博请遵守国家法律