7.25笔记

一、File

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

注意 : java中路径分隔符可以使用/ // \

在使用相对路径时候,在java中默认根路径为当前所在项目根目录

File(String pathname)

通过将给定的路径名字符串转换为抽象路径名来创建一个新的File实例。

File file1=new File("D://XZ//xiao.txt");
System.*out*.println(file1);

File(String parent, String child)

从父路径名字符串和子路径名字符串创建一个新的File实例。

File file2=new File("D://XZ");
System.*out*.println(file2);
File file3=new File(file2,"xiao.txt");
System.*out*.println(file3);

File(File parent, String child)

从父抽象路径名和子路径名字符串创建一个新的File实例。

File file4=new File("D://XZ","xiao.txt");
System.*out*.println(file4);
File file5=new File("xiao.txt");
System.*out*.println(file5);

boolean canWrite()

测试应用程序是否可以修改此抽象路径名表示的文件。

System.*out*.println(file1.canWrite());

boolean setReadOnly()

标记由此抽象路径名命名的文件或目录,以便只允许读取操作

System.*out*.println(file1.setReadOnly());*//T*System.*out*.println(file1.canWrite());

boolean createNewFile()

当且仅当具有此名称的文件尚不存在时,以原子方式创建以此抽象路径名命名的新的空文件。

File file6=new File("D://XZ//xiaofeixia.txt");
System.*out*.println(file6.createNewFile());
​
System.*out*.println(file5.createNewFile());
​
File file7=new File("src/xiaofeixia.txt");
System.*out*.println(file7.createNewFile());

boolean delete()  

能够删除文件以及空文件夹 删除此抽象路径名表示的文件或目录。

System.*out*.println(file7.delete());
System.*out*.println(new File(file2,"BBB").delete());

boolean exists()

测试此抽象路径名表示的文件或目录是否存在

System.*out*.println(file1.exists());
System.*out*.println(new File(file2,"BBB").exists());

File getAbsoluteFile()

返回此抽象路径名的绝对形式。

System.*out*.println(file1.getAbsoluteFile());

String getAbsolutePath()

返回此抽象路径名的绝对路径名字符串。

System.*out*.println(file1.getAbsolutePath());

long getFreeSpace()
通过此抽象路径名返回分区named中未分配的字节数。
long getTotalSpace()
通过此抽象路径名返回分区named的大小。
​
System.*out*.println(new File("D://").getFreeSpace());
System.*out*.println(new File("D://").getTotalSpace());

String getName()
返回此抽象路径名表示的文件或目录的名称。
System.*out*.println(file1.getName());
String getParent()
返回此抽象路径名的父目录的路径名字符串,如果此路径名未命名父目录,则返回null 。
System.*out*.println(file5.getParent());
File getParentFile()
返回此抽象路径名的父级的抽象路径名,如果此路径名未命名父目录,则返回null 。
​
System.*out*.println(file5.getParentFile());

boolean isAbsolute()
测试此抽象路径名是否是绝对的。
​
System.*out*.println(file1.isAbsolute());

boolean isDirectory()
测试此抽象路径名表示的文件是否为目录。
​
System.*out*.println(file1.isDirectory());
二、IO流
1.IO流

读写文件内部的内容,上传下载,拷贝文件,拷贝文件夹

:就是管道

以先入先出的方式进行流动

作用:做数据传输

数据源-->目的地

流的分类:(所有分类之间相辅相成)

按流向分:(以程序为中心)

输入流

输出流

按照操作单元:

字节流:万能流

字符流:操作纯文本文件

按照功能划分:

节点流:真实做读入写出的流

处理流|功能流:增强节点流的性能,提高节点流的性能

2.字节流

输入流:InputStream

根据数据源选择节点流:节点流

数据源为字节数组:ByteArrayInputStream字节数组输入流(了解)

数据源为文件:FileInputStream文件字节流

输出流:OutoutStream

步骤:

需求:从文件中读入数据到程序

文件:数据源-->程序:目的地

1) 构建文件字节流输入

FileInputStream(File file)通过打开与实际文件的连接来创建FileInputStream,该文件由系统中的File对象file命名

FileInputStream(String name)通过打开与实际文件的连接来创建FileInputStream,该文件由系统中的路径名name命名

FileInputStream is = new FileInputStream(new File("D://AAA/test2.txt"));

2)读入数据

int num = is.read();

3)使用数据

System.out.println((char)num);
System.out.println((char)(is.read()));
System.out.println((char)(is.read()));
System.out.println(is.read()); 如果读到文件末尾返回-1

4)关闭

is.close();
优化 :

之前使用字节流每次读入一个字节数据,重复读入多次,重复读入的代码过于冗余,不够精简

可以通过循环结构简化重复读入的操作

1.与文件建立联系(数据源文件|目的地文件)

File src = new File("D://AAA/test2.txt");

2.构建流(文件字节输入流)

FileInputStream is = new FileInputStream(src);

3.读入数据

int num;
​
while((num=is.read())!=-1){
​
•    4.使用数据
​
   System.out.println((char)num);
​
}

5.关闭

is.close();
优化 :

每次读入一个字节,循环读入多次,虽然代码简洁,但是效率较低

可以从每次读入一个字节数据变为每次读入一卡车字节数据

int read(byte[] b) 从输入流中读取一些字节并将它们存储到缓冲区数组b中

返回值 : 为每次读入到字节数组中数据的个数

1.与文件建立联系(数据源文件|目的地文件)

File src = new File("D://AAA/test2.txt");

2.构建流(文件字节输入流)

FileInputStream is = new FileInputStream(src);

3.读入数据

int len; 记录每次读入的数据个数
​
byte[] car = new byte[1024];
while((len=is.read(car))!=-1){
    4.使用数据
​
    System.out.println(new String(car,0,len));
}
byte[] readAllBytes()
​
从输入流中读取所有剩余字节
​
System.out.println((char)(is.read()));
​
System.out.println(new String(is.readAllBytes()));

5.关闭

is.close();
异常捕获+资源关闭

jdk7下新增 : try-with-resources,对try中创建的资源在使用完毕之后进行关闭,要求资源的类型必须实现了

AutoCloseable接口

1.idk7之前 cry-->catch-->finally

声明

FileInputStream is = null;

try {

1.与文件建立联系(数据源文件|目的地文件)

2.构建流(文件字节输入流)

is = new FileInputStream("D://XZ/xiao.txt");
int len;记录每次读入的数据个数
​
       byte[] car = new byte[1024];
       while ((len = is.read(car)) != -1) {
            System.*out*.println(new String(car, 0, len));
       }
    } catch (FileNotFoundException e) {
        e.printStackTrace();用于打印异常的堆栈信息
   } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (is != null) {
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
2.jdk7新增 try----> with----->resources
try(FileInputStream is=new FileInputStream("D://XZ/xiao.txt")){
    int len;
    byte[] car=new byte[1024];
    while((len= is.read(car))!=-1){
        System.out.println(new String(car,0,len));
    }
} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}
3.jdk9之前:
  FileInputStream is= null;
​
•        try (FileInputStream is2=is){
•            int len;
•            byte[] car=new byte[1024];
•            while((len= is2.read(car))!=-1){
•                System.*out*.println(new String(car,0,len));
•            }
•        } catch (FileNotFoundException e) {
•            e.printStackTrace();
•        } catch (IOException e) {
•            e.printStackTrace();
•        }
4.jdk9新增:
 try(is){
            int len;
            byte[] car=new byte[1024];
            while ((len= is.read(car))!=-1){
                System.*out*.println(new String(car,0,len));
            }
        }catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

字节输出流 :

OutputStream 这个抽象类是代表字节输出流的所有类的超类

根据目的地选择节点流 :

当目的地为字节数组 : ByteArrayOutputStream 字节数组输出流

当目的地为文件 : FileOutputStream 文件字节输出流

注意 : 如果目的地文件存在并且包含内容,写出默认覆盖,可以调用重载构造器,boolean append-->true追加

false覆盖

如果目的地文件不存在,系统会自动创建目的地文件,但是目的地文件所在路径(文件夹)不会自动创建

步骤:

需求 : 将程序中的数据写出到输出流中,流向目的地文件

1)与目的地文件建立联系

2)构建文件字节输出流

FileOutputStream os = new FileOutputStream("D://AAA/test2.txt"); 默认覆盖
​
FileOutputStream os = new FileOutputStream("D://AAA/test.txt",true);  追加  

3)准备数据

byte data = 97;
byte[] arr = "你好".getBytes();

4)写出数据

os.write(data);
os.write(arr);

5)刷出

os.flush();

6)关闭

os.close();

异常捕获
FileOutputStream os= null;
try {
    os = new FileOutputStream("D://XZ/xiao.txt",true);
} catch (FileNotFoundException e) {
    e.printStackTrace();
}finally {
    byte date=97;
    byte[] arr="你好呀".getBytes();
    try {
        os.write(date);
        os.write(arr);
        os.flush();
        os.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值