首页 > 其他分享 >文件操作和io

文件操作和io

时间:2023-09-13 18:25:05浏览次数:58  
标签:文件 file io System File println 操作 out

文件的概念

文件分为狭义的文件和广义的文件,这里讨论的是狭义的文件。文件是针对硬盘抽象出来的概念,当我们想要将数据保存再硬盘上时,是以文件的形式来保存的,并且是以文件为单位来保存的。文件包含的信息有文件名,文件类型,文件大小等,我们把这些信息视为文件的原信息。

由于文件的繁复,为了对文件进行高效的管理,诞生了对文件按照层级结构组织管理的方式,这种方式就是树型结构组织,就像数据结构里的树型结构。于是就有了用于存放管理信息的文件,例如我们计算机上的文件夹和目录。

绝对路径和相对路径

绝对路径,如何在文件系统中定位到唯一的文件,根据管理文件的树型结构来看,要想定位到指定文件就要从根节点开始一步一步到达指定节点,把这个过程对应到文件的路径中就是绝对路径。

 红色方框里的就是绝对路径。

相对路径,相对路径的起点不是根节点,而是以某个节点为参考,从参考节点出发到终点的叫做相对路径,就是以当前目录为参考的一条路径。假设当前目录为D:\temp,要想定位到image这个目录,就可以表示成 ./image,./就表示当前目录。

如果工作目录是D:\temp\movie,要想定位到image目录,相对路径为 ../image,../表示上级目录;

如果当前目录是D:\temp\movie\family,要想定位到image目录,相对路径为 ../../image。

Java中对文件的操作

1、针对文件系统操作(文件的创建,删除,重命名...);

2、针对文件内容的操作(读和写)。

Java中提供了File类。

在构造File对象时,要指定一个路径,此时File对象就是指定路径所对应的文件。

File类中提供了许多方法来操作文件,我们借助代码来讲解:

1、创建File对象

public static void main(String[] args) throws IOException {
        File file = new File("d:/text.txt");
        //返回file对象的文件名称
        System.out.println(file.getName());
        //返回file对象的父目录文件路径
        System.out.println(file.getParent());
        //返回file对象的文件路径
        System.out.println(file.getPath());
        //返回file对象的绝对路径
        System.out.println(file.getAbsoluteFile());
        //返回file对象规范的绝对路径
        System.out.println(file.getCanonicalFile());
    }

创建一个File对象,此时的File对象就是d:/test.txt路径对应的文件test.txt(此时不要求d:/下真的有这个对象,这里只是创建了一个对象,而不是创建了一个文件)。看看执行结果:

 

注意:“/” 和 “\”的效果是一样的,windows上盘符大小写都可以。

我们将上述代码中构造对象的路径改为相对路径,其他不变:

 

看看执行结果:

两个结果对比,可以看到,getParent()是不会对路径中的“.”或“..”进行路转的,同理getAbsoluteFile()获取到的路径如果包含“.”或“..”是不进行路转的,而getCanonicalFile()是会对“.”或“..”进行路转的。

2、指定路径创建一个文件

public static void main(String[] args) throws IOException {
        File file = new File("./test.txt");
        //创建一个文件
        file.createNewFile();
        //判断文件是否真的存在
        System.out.println(file.exists());
        //判断File对象代表的是否为一个普通文件
        System.out.println(file.isFile());
        //判断file对象代表的文件是否是以个目录
        System.out.println(file.isDirectory());
    }

 可以看到左侧目录也多了text.txt这个文件,如果想删除文件,直接调用delete()就行。

 

数据流

“流”可以理解为川流不息的水流,Java中将数据流分为两大类,字节流和字符流。

字节流,对文件进行进行读写时,是以“字节”为单位进行10个字节或100个字节的读写操作。Java中提供了以字节流方式读取文件内容的类:InputStream,InputStream是抽象类,不能直接进行new操作,要使用就需要实现具体的类,这里使用FileInputStream。同样的我们借助代码来讲解InputStream的使用:

public static void main(String[] args) throws IOException {
        InputStream inputStream = new FileInputStream("d:/cat.jpg");
        //读取文件
        while(true){
            //read()返回类型是int,每次读取一个字节的数据,等于-1表示读取完成。
            int b = inputStream.read();
            if(b == -1){
                break;
            }
            System.out.printf("%x\n", (byte)b);
        }
        //关闭字节流,使用InputStream最后一定要进行这个操作
        inputStream.close();
    }

Java中提供写操作的类OutputStream,与InputStream类似也是抽象类,要使用具体实现的类,这里使用FileOutputStream。

public static void main(String[] args) throws IOException {
        //使用write()来进行写操作
        try(OutputStream outputStream = new FileOutputStream("d:/test.txt")){
            outputStream.write(97);//a对应的ascii为97
            outputStream.write(98);//b
            outputStream.write(99);//c
            outputStream.write(100);//d

            //不要忘记这一步
            outputStream.flush();
        }
    }

 

数据流,Java中提供读的类是Reader,Reader也是抽象类,这里使用FileReader,提供写的操作是Writer,也是抽象类,这里使用FileWriter。

public static void main(String[] args) throws IOException {
     //进行读操作 Reader reader = new FileReader("d:/test.txt"); while(true){ int ch = reader.read();//read()返回类型为int,当等于-1时,读取完毕 if(ch == -1){ break; } System.out.print("" + (char)ch); } }

 

写操作:

 public static void main(String[] args) throws IOException {
        Writer writer = new FileWriter("d:/test.txt");
        writer.write("hello world");
        //刷新缓冲区
        writer.flush();
    }

标签:文件,file,io,System,File,println,操作,out
From: https://www.cnblogs.com/xbyss/p/17697509.html

相关文章

  • linux 中实现按照行交叉合并两个文件
     001、方法1[root@pc1test01]#lsa.txtb.txt[root@pc1test01]#cata.txt123456[root@pc1test01]#catb.txtabcdef[root@pc1test01]#paste-d"_"a.txtb.txt12_ab34_cd56_ef[root@pc1test01]#paste-d"_"a.txtb......
  • HDFS的常见Shell操作
    HDFS的常见Shell操作直接在命令行中输入hdfsdfs,可以查看dfs后面可以跟的所有参数。详细使用方法请参考官方文档。注意:这里面的[]表示是可选项,<>表示是必填项[hadoop@hadoop81hadoop]$hdfsdfsUsage:hadoopfs[genericoptions] [-appendToFile<localsrc>...<dst>] [-cat......
  • 特斯拉100G数据泄露事件:系内部员工违规操作
    近日,特斯拉向其员工以及美国执法部门通报了“100G数据泄露事件”的具体规模及原因。这起今年5月份发生的大规模数据泄露事件影响了逾7.5万人,其中包括与员工相关的各种敏感信息,而这一切竟然源自“内部员工的不法行为”。内部员工违规致使泄露事件调查显示,两名特斯拉前员工违反了特斯......
  • latex部分操作
    Latex部分用法当latex表格超页时该怎么办,通过改变0.95到其他数字更改缩放比例\begin{table}[t]\centering\resizebox{0.95\columnwidth}{!}{\begin{tabular}{lccc}\hline&&&&\hline\end{tabular}}\caption{Thisisacaption}\label{tab:table1}\end{table}让......
  • springboot 整合 nacos 实现配置文件统一管理 和 服务注册
    1.我使用的是 nacos-server-1.4.1 直接启动nacos没有配置数据库那些.\startup.cmd-mstandalone2.启动后在nacos中创建命名空间配置文件 注意命名空间的id我是自己定义的还有group到时候配置错了服务又不会报错只是会读取不到3.springboot配置 server-addr......
  • Program文件的作用
    Program.cs文件分析Program.cs文件是至关重要的一个文件,它包含应用程序启动的代码,还可以配置所需要的服务和应用管道的中间件。需要掌握:6.0版本前后生成的Program.cs文件的区别Program.cs文件的作用Startup.cs文件的作用版本注意:在6.0版本之前(不含6.0)6.0版本之前,在使......
  • JSNeedAttention
    JSAttentionpush返回的是数组增加后的长度!!!对象名可变setFieldsValue({[`bank${index}`]:val});判断是否空对象Object.keys(obj);JSON.stringify(obj)!=="{}";还有$.isEmptyObject(data2);Object.getOwnPropertyNames(data3);//和Object.keys类似关闭标签替......
  • HarmonyOS/OpenHarmony应用开发-DevEco Studio帮助快速入门的使用
    DevEcoStudio内置有帮助中心,初学HarmonyOS及OpenHarmony应用、元服务的开发者,通过内置的帮助中去系统的学习相关内容,是边练边学,快速上手的最佳方式。一、帮助二、快速开始三、HarmonyOS应用、元服务开发相关四、OpenHarmony应用、元服开发相关五、更多的常用基础知识与技巧了解学......
  • Linux实现查看文件内容的5种方式
    除了使用vi/vim编辑器查看文件内容和使用cat命令将文件所有内容展示到终端上以外,还有多种方式。1、more:分屏显示文件内容。   点击q键退出。    more与cat类似,只不过如果文件内容超过了当前终端一个屏幕能显示的大小,此时more命令就会在终端只显示一个屏幕的文件内容......
  • Python pandas 读取 excel文件
    参考:https://www.jb51.net/article/283627.htm#单纯导出一个数据集defexportData_pandas(excelFile='output.xlsx'):try:#data={'Name':['Alice','Bob','Charlie'],#'Age':[......