JAVA EE_文件操作和IO

发布于:2025-04-18 ⋅ 阅读:(24) ⋅ 点赞:(0)

人们大多数时候的焦虑,大概是太想要一个那不确定的答案了吧。

                                                                                                                                  一一  陳長生.

1.认识文件

        现实中,我们把一张一张有内容的纸整合在一起称为文件,计算机中,通过硬盘这种I/O设备进行数据保存时,它会独立成一个一个的单位保存,而这种以单位方式保存的也就称为文件。

        文件除了数据内容外,还有文件名,文件类型,文件大小等信息,我们称为文件的元信息。

1.1.树型模型组织 和 目录

        随着文件的越来越多,对一批大量的文件我们就需要进行管理,而树型模型就是个很好的管理模式,有父级,同级,子级,而这种我们一般称为文件夹或目录。

1.2.文件路径(Path)

        那么创建了文件如何在计算机查找那唯一的文件呢,我们一般用绝对路径和相对路径。

1.2.1.绝对路径

        绝对路径就是一条完整的路径,开头是从盘符(例如:C:)开始的,可以从树型的角度想,每个节点都是从根节点开始往下,而树型中的根节点就是我们所谓的盘符。

例:D:\java相关\java ee\4.Java+EE初阶课件\Java EE初阶课件

1.2.2.相对路径

         除了从根节点开始出发,我们还可以从任意节点查找,这种我们就称为相对路径。

例:\Java EE初阶课件

1.3.文件类型

        普通文件由于被保存的方式不同,我们也可以将文件分文本文件和二进制文件。

1.3.1.文本文件

        被ascii码编译过的字符,每个字符都对应着一个ascii码值。

1.3.2.二进制文件

        文件内容通常由字节序列组成,不依赖于字符编码。

2.JAVA中操作文件

        JAVA中通过File类对一个文件进行抽象的描述,注:有File对象并不代表该文件真实存在,它只是对文件或目录路径的抽象表示。

2.1.File类

2.1.1.File构造方法

import java.io.File;
import java.net.URI;
import java.net.URL;
//构造方法示例
public class text1 {
    public static void main(String[] args) {
        //File(URL url)
        //通过url来实例化File对象
        URI url =new File("text1.txt").toURI();//获取当前类的路径
        File file1 =new File(url);
        //File(String pathname)
        //通过绝对路径来实例化File对象
        File file2=new File("text1.txt");//获取当前类的路径
        //File(String parent,string chile)
        //通过父路径和子路径来实例化File对象
        File file3=new File("C:/parent","chile.txt");//获取当前类的路径下的chile.class文件
        //File(File parent,String child)
        //通过实例化过的父路径和每实例化过的子路径来实例化路径
        File Praent=new File("C:/parent");
        File file4=new File(Praent,"chile.txt");
    }
}

2.1.2.File方法

get相关的方法
//get相关方法
import java.io.File;
public class text2 {
    public static void main(String[] args) throws Exception  {
        File file=new File("./text");
        //获取文件名
        file.getName();
        //获取父文件夹名
        file.getParent();
        //获取文件路径
        file.getPath();
        //获取绝对路劲
        file.getAbsolutePath();
        //获取规范路径
        file.getCanonicalPath();
    }
}
文件与文件夹(目录)的创建删除
//文件与文件夹(目录)的创建删除
import java.io.File;
public class text3 {
    public static void main(String[] args) throws Exception {
        File file=new File("./text");
        //文件的创建
        file.createNewFile();
        //文件的删除
        file.delete();

        //文件夹的创建
        file.mkdir();
        //多重文件夹的创建
        file.mkdirs();
    }
}
判断
//判断
import java.io.File;
public class text4 {
    public static void main(String[] args) {
        File file=new File("./text");
        //判断是否是文件夹
        file.isDirectory();
        //判断是否是文件
        file.isFile();
    }
}

3.数据流--文件内容的读写

        文件内容的操作,一般分为读文件(硬盘数据读到内存中)和写文件(内存的数据写入硬盘),而我们计算机是用流对象来进行文件内容的操作。

3.1.流操作

        

3.1.1.InputStream与FileInputStream

        JAVA提供的InputStream类可以提供读取方法,但是因为它是抽象类,所以要有它的具体实现类FileputStream来实现读取方法。

1)关闭资源

        JAVA中“关闭资源”是一个重要的操作,它能起到防止资源泄露,保证数据完整性的功能,在JAVA中有提供close()方法来关闭资源,但是大多数情况,我们都是使用try-with-resources(下面讲到)。

2)输出流
read()
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
//read()方法
public class text5 {
    public static void main(String[] args) throws Exception { 
        //实例化一个File对象,指定文件路径  
        File file=new File("./text.txt");
        //创建文件
        file.createNewFile();
        //实例化一个FileInputStream对象,指定文件路径
        //try-with-resources语句,自动关闭资源
        try(InputStream input=new FileInputStream(file)){
            //循环读取文件内容
            while(true){
            //读取一个字节
            int c=input.read();
            //因为当read()方法读取完文件中的内容后还会返回-1
            //所以当read()方法返回-1时,就说明文件中的内容已经全部读取完了
            if(c==-1){
            break;
        }
        // 将读取到的字节转换为十六进制格式输出
        // 适用于查看字节的原始值,不仅限于ASCII编码的文本文件
        System.out.printf("0x%x",c);
        System.out.println();
            }
        } catch (Exception e) {
                e.printStackTrace();// TODO: handle exception
        }
        
        
    }
}
read(byte[] b)
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
//read(byte[] b)
public class text6 {
    public static void main(String[] args) throws Exception {
        //实例化File对象,指定文件路径
        File file=new File("./ccs.txt");
        //创建文件
        file.createNewFile();
        //实例化一个FileInputStream对象,指定文件路径
        //try-with-resources语句,自动关闭资源
        try(InputStream f1=new FileInputStream(file)){
            //循环读取文件内容
            while(true){
                //定义一个byte数组,用于存储读取到的字节
                byte []bytes=new byte[1024];
                //调用read方法,将文件内容读取到bytes数组中
                int n=f1.read(bytes);
                //如果read方法返回-1,表示文件已经读取完毕
                if(n==-1){
                    break;
                }  
                //遍历bytes数组,输出每个字节的十六进制表示
                for(int i=0;i<n;i++){
                    System.out.printf("0x%x",bytes[i]);
                    System.out.println();
                }
            }
        }catch( Exception e){
            e.printStackTrace();
        }  
    }
}
3)输入流
write()

先创建一个空白的文本文件

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
//write()方法
//write()方法用于将数据写入文件,数据可以是字节数组,也可以是单个字节。
public class text7 {
    public static void main(String[] args) throws IOException {
        //实例化一个File对象,指定文件路径
        File input=new File("./demo1.txt");
        //创建文件
        input.createNewFile();
        //try-with-resources语句,自动关闭资源
        //FileOutputStream类是OutputStream的子类,用于将数据写入文件
        try (OutputStream output = new FileOutputStream(input);){
            //写入ascii为97,98,99,100的几个字节
            output.write(97);
            output.write(98);
            output.write(99);
            output.write(100);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

运行后文本内容

内容为ascii为97,98,99,100的字符

write(byte[] b)方法
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
// write(byte[] b)方法
public class text8 {
    public static void main(String[] args) throws IOException {
        //实例化一个File对象,指定文件路径
        File input=new File("./demo1.txt");
        //创建文件
        input.createNewFile();
        //try-with-resources语句,自动关闭资源
        //FileOutputStream类是OutputStream的子类,用于将数据写入文件
        try (OutputStream output = new FileOutputStream(input);){
            //创建一个字节数组,存储要写入的字节
            byte[] bytes = {101,102,103,104};
            //将字节数组写入文件
            output.write(bytes);   
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

运行后文本内容

由原本的abcd转为efgh

append

        明明没有进行删除操作,为什么abcd不见了呢?其实这个是因为它在每次运行时就创建一个新的文本,相当于将之前的内容清空然后再填入新的数据

        那有没有什么办法可以不清除之前的数据呢,答案是有的!

        可以看到String name后面还有给参数,是boolean类型的append,该参数是判断是否需要追加内容

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
// 追加方法
public class text9 {
    public static void main(String[] args) throws IOException {
        //实例化一个File对象,指定文件路径
        File input=new File("./demo1.txt");
        //创建文件
        input.createNewFile();
        //try-with-resources语句,自动关闭资源
        //FileOutputStream类是OutputStream的子类,用于将数据写入文件
        try (OutputStream output = new FileOutputStream(input,true);){
            //创建一个字节数组,存储要写入的字节
            byte[] bytes = {101,102,103,104};
            //将字节数组写入文件
            output.write(bytes);   
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

运行后文本内容

可以看到已经成功追加数据了~~


网站公告

今日签到

点亮在社区的每一天
去签到