zoukankan      html  css  js  c++  java
  • java之 File类 & 字节流(byte)

    0x01、File类

    File类主要用于文件和目录创建、查找、删除等操作的。

    1、file类的构造方法

    public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
    public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的 File实例。
    public File(File parent, String child) :从父抽象路径名和子路径名字符串创建新的 File实例。
    

    2、常用方法:

    public String getAbsolutePath() :返回此File的绝对路径名字符串。
    public String getPath() :		 将此File转换为路径名字符串。
    public String getName() :		 返回由此File表示的文件或目录的名称。
    public long length() :			 返回由此File表示的文件的长度。
    

    代码示例:

    public static void main(String[] args) {
            String Pathname = "C:\Users\86183\Desktop\a.txt";
            File abc = new File(Pathname);
            System.out.println(abc.getAbsolutePath());
        
            String Pathname1 = "C:\Users\86183\Desktop\a.txt";
            File abc1 = new File(Pathname1);
            System.out.println(abc1.getAbsolutePath());
            System.out.println(abc1.getPath());
            System.out.println(abc1.length());
    }
    

    3、判断方法

    public boolean exists() :     此File表示的文件或目录是否实际存在。
    public boolean isDirectory() :此File表示的是否为目录。
    public boolean isFile() :     此File表示的是否为文件。
    

    代码示例:

    public static void main(String[] args) {
        String Pathname = "C:\Users\86183\Desktop\artifact.exe";
        File abc = new File(Pathname);
        boolean a = abc.exists();
        System.out.println(a);
        System.out.println(abc.isFile());
        System.out.println(abc.isDirectory());
    
    }
    

    4、增删功能方法

    public boolean createNewFile() :当前仅当具有该名称的文件尚不存在时,创建一个新的空文件。
    public boolean delete() :删除由此File表示的文件或目录。
    public boolean mkdir() :创建由此File表示的目录。
    public boolean mkdirs() :创建由此File表示的目录,包括任何必需但不存在的父目录。
    
    public static void main(String[] args) throws IOException {
            String Pathname = "a.txt";
            File abc = new File(Pathname);
            boolean file = abc.createNewFile();
            System.out.println(file+"
    "+abc.getAbsolutePath());
    
    
           File abc1 = new File("abc");
           abc1.mkdir();
    
           File abc2 = new File("abc\abc");
           abc2.mkdirs();
        }
    

    如果是对目录进行删除,删除的目录必须为空才能进行删除。

    5、目录遍历

    在file里面给我们提供了,可以直接获取file目录下面所有子文件或目录。

    public String[] list() :返回一个String数组,表示该File目录中的所有子文件或目录。
    public File[] listFiles() :返回一个File数组,表示该File目录中的所有的子文件或目录。
    
    public static void main(String[] args) throws IOException {
            String Pathname = "../";
            File abc = new File(Pathname);
            String[] name = abc.list();
            for (String s : name) {
                System.out.println(s);
            }
        }
    

    使用list方法获取所有文件,然后使用增强for循环进行遍历。

    0x02、字节流

    • I : Input 输入 从其他存储设备读数据到内存中就是输入
    • O : Output 输出 从内存中写数据到其他存储设备

    根据数据的流向分为:输入流输出流

    • 输入流 :把数据从其他设备上读取到内存中的流。

      • 字节输入流:以字节为基本单位,读数据
      • 字符输入流:以字符为基本单位,读数据
    • 输出流 :把数据从内存 中写出到其他设备上的流。

      • 字节输出流:以字节为基本单位,写出数据

      • 字符输出流:以字符为基本单位,写出数据

    1、字节输出流

    OutputStream抽象类是字节输入流的超类,他定义了几个共性的方法。

    public void close():关闭此输出流并释放与此流相关联的任何系统资源。    
    public void write(byte[] b):将 b.length字节从指定的字节数组写入此输出流。  
    public void write(byte[] b, int off, int len) :从指定的字节数组写入 len字节,从偏移量 off开始输出到此输出流。  
    public abstract void write(int b) :将指定的字节输出流。
    

    close方法,当完成流的操作时,必须调用此方法,释放系统资源。

    (1)、FileOutputStream类

    FileOutputStream类是文件输出流,用于将数据些出到文件当中。

    查看构造方法:

    public FileOutputStream(File file) :创建文件输出流以写入由指定的 File对象表示的文件。
    public FileOutputStream(String name) : 创建文件输出流以指定的名称写入文件。
    

    ​ 如果创建一个io流的对象,必须传入文件的路径,,如果没有该文件就会创建该文件,如果有就会清空原本有的数据。

    代码:

    public static void main(String[] args) throws IOException {
            File file = new File("a.txt");
            FileOutputStream FileoutDate = new FileOutputStream(file);
            FileoutDate.write(97);
            FileoutDate.close();
        }
    

    ​ 这里写进入一个97,但是打开文件会发现写进入的变成了a,这是因为我们这里是以byte形式进行写入的,,而97的ascii转换为字符后,就是a这个字符。

    ​ 这里还可以指定写出的数据长度

    Public class FileOutput {
        public static void main(String[] args) throws IOException {
            File file = new File("a.txt");
            FileOutputStream FileoutDate = new FileOutputStream(file);
            byte[] b = "abce3".getBytes();
            FileoutDate.write(b,2,2);
            FileoutDate.close();
        }
     }
    

    这里要先获取字符的字节类型数据,使用write写入,从第二位开始索引,写入2个字节。

    在程序开发中,有些数据可能没法一次执行获取所有结果,这时候我们如果以上面的方式来循环写入运行结果的话,每次循环就都会被清空一次,只获得最后一次的执行结果。那么这时候我们就可以使用到追加,把它追加进入,而不是直接覆盖重写。

    public FileOutputStream(File file, boolean append) : 创建文件输出流以写入由指定的 File对象表示的
    文件。
    public FileOutputStream(String name, boolean append) : 创建文件输出流以指定的名称写入文件。
    

    代码

     public static void main(String[] args) throws IOException {
            File file = new File("a.txt");
            FileOutputStream FileoutDate = new FileOutputStream(file,true);
            byte[] b = "abce3".getBytes();
            FileoutDate.write(b,2,2);
            FileoutDate.close();
        }
    

    几行代码和前面的相同,只是在FileOutputStream 构造方法里面传入一个ture,表示使用追加模式,该模式默认为false。

    2、字节输入流

    InputStream抽象类是字节输入流的超类。可以读取字节数据到内存中。

    public void close() :关闭此输入流并释放与此流相关联的任何系统资源。
    public abstract int read() : 从输入流读取数据的下一个字节。
    public int read(byte[] b) : 从输入流中读取一些字节数,并将它们存储到字节数组 b中 。
    

    (1)、FileInputStream 类

    ​ FileInputStream是文件输入流,从文件中读取字节到内存中。

    ​ 构造方法:

    FileInputStream(File file) : 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系
    统中的 File对象 file命名。
    
    FileInputStream(String name) : 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件
    系统中的路径名 name命名。
    

    代码:

     public static void main(String[] args) throws IOException {
            File file = new File("a.txt");
            FileInputStream fileinputdata = new FileInputStream(file);
            int read = fileinputdata.read();
            System.out.println((char) read);
            read = fileinputdata.read();
            System.out.println((char) read);
            read = fileinputdata.read();
            System.out.println(read);
            fileinputdata.close();
        }
    

    使用read方法读取完后,地址会往后推一位,知道读取到没有,会返回-1。

    以上的方法都是读取单个字节,我们可以定义一个字节类型的数值,然后让他每次读取我们指定的长度。

    代码:

      public static void main(String[] args) throws IOException {
            File file = new File("a.txt");
            FileInputStream fileinputdata = new FileInputStream(file);
            int len;
            byte[] b = new byte[2];
            while ((len=fileinputdata.read(b))!=-1){
                System.out.println(new String(b,0,len));
            }
            fileinputdata.close();
        }
    

    这里定义了b变量用来接收每次读取的数据产的长度,然后定义一个len变量,接收每次读取的数据,这里可以直接把赋值放在循环条件里面,如果赋值的变量不等于-1,就一直循环,知道读取到-1,停止循环,前面说到如果没有数据读取会输出返回一个-1,结束循环。

  • 相关阅读:
    软件工程网络15个人阅读作业1
    团队课程设计博客
    计时器(何雨柔201521123040)
    软工网络15个人作业4——alpha阶段个人总结
    软工网络15个人作业3——案例分析
    软件工程网络15结对编程作业
    软工网络15个人作业2
    软件工程网络15个人阅读作业1(201521123032 黄登峰)
    计时器(黄登峰 201521123032)
    201521123032 《Java程序设计》第14周学习总结
  • 原文地址:https://www.cnblogs.com/0x7e/p/14320297.html
Copyright © 2011-2022 走看看