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+"\n"+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,结束循环。

posted @ 2021-01-24 11:08  0X7e  阅读(1047)  评论(0编辑  收藏  举报