Java语法七:文件操作---IO
创始人
2024-05-11 06:50:49
0

目录

1.File概述

1.1:File概述的方法

 2:文件内容的读写

2.1:字节流

2.1.1:读--InputStream

2.1.2:写---OutputStream

2.2:字符


前言:

这一篇我们将讲文件操作的相关方法,以及数据流和字符流的相关操作

1.File概述

说到file,我们首先要弄清楚相对路径,绝对路径,网络路径。

  • 相对路径:必须要有一个基准路径。相对路径:就是从基准路径出发,看从那种的路径来看找到对应的文件。

如果基准路径:C:\Software\exercise,那么hello.txt相对路径就是:.\hello.txt

如果基准路径:C:\Software,那么hello.txt 的相对路径就是:.\exercise\hello.txt

  • 绝对路径:是以盘符开头的。

那么hello.txt的绝对路径就是:C:\Software\exercise.\hello.txt。

  • 网络路径:就是通过一个网络路径就可以打开一个网络上的东西。

1.1:File概述的方法

返回值类型方法签名说明
StringgetParent()返回File对象的父目录文件路径
StringgetName()返回File对象的纯文件名称
Stringgetpath()返回File对象的文件路径(相对路径)
StringgetAbsolutedPath()返回File对象的绝对路径(基准路径加相对路径)
StringgetCanonicalPath()返回File对象的绝对路径
booleanexists()判断File对象描述的文件是否真实存在
booleanisDirectory()判断File对象描述的文件是否是一个目录
booleanisFile()判断File对象描述的文件是否是一个普通文件
booleancreateNewFile()根据File对象,自动创建一个空文件,成功后返回true
booleandelete()根据File对象,删除该文件,成功后返回true
voiddeleteOnExit()删除文件,删除动作回到JVM运行结束时才会进行。
String[]list()返回File对象代表的目录下的所有文件名
file[]listFiles()返回File对象代表的目录下的所有文件,以File对象表示
booleanmkdir()创建File对象代表的目录
booleanmkdirs()创建File对象代表的目录
booleanrenameTo(Filedest)对文件重命名
booleancanRead()判断是否有可读权限
booleancanWrite()判断是否有可写权限

1.File对象:

File file=new File("./text.txt"); //这个并不要求改文真实存在

2.getAbsolutedPath() /getCanonicalPath()----返回file对象的文件绝对路径(返回String)

例如:System.out.println(file.getAbsolutePath());

结果显示:D:\编程\代码\gittee\fighting\File_boke \.\text.txt

这里多了一个 .\ 在这个方法getAbsolutePath(),返回的结果是基准路径加上相对路径 

D:\编程\代码\gittee\fighting\File_boke ,这个是当前的代码文件路径(也是text.txt的基准路径)。

./text.txt 这是相对路径。

例如:System.out.println(file.getCanonicalPath());

结果显示:D:\编程\代码\gittee\fighting\File_boke\text.txt。

这个就是正常的绝对路径。


代码演示:

示例一:

 File file=new File("./text.txt");//这个并不要求改文件是否真实存在System.out.println("文件名:"+file.getName());System.out.println("文件的绝对路径"+file.getAbsolutePath());System.out.println("文件的绝对路径"+file.getCanonicalPath());System.out.println("文件的相对路径:"+file.getPath());System.out.println("父目录路径"+file.getParent());

结果显示:


 示例二:

 public static void main(String[] args) throws IOException {File file=new File("./hello.txt");//创建一个文件file.createNewFile();//会抛出IOException//判断文件是否真实存在System.out.println("文件是否真实存在:"+file.exists());System.out.println("改名前的文件名:"+file.getName());//判断是否是一个文件System.out.println("是否是一个文件:"+file.isFile());//判断是否是一个目录System.out.println("是否是一个目录:"+file.isDirectory());//对文件重命名File file1=new File("./word.txt");System.out.println(file.renameTo(file1));System.out.println("word.txt文件是否存在:"+file1.exists());System.out.println("hello.txt文件是否存在:"+file.exists());System.out.println("改名后的文件名:"+file.getName());

结果显示:

 文件重命名:为啥改名前和改名后的文件名是一样的勒?

因为这个只是把磁盘上的文件给改动,file对象不变的。


示例三:

 public static void main(String[] args) {//创建一个单级目录File file=new File("./ddd");file.mkdir();//判断是否是一个目录System.out.println("是否是一个目录:"+file.isDirectory());//创建多级目录File file1=new File("./aaa/bbb/ccc");file1.mkdirs();//返回File对象代表的目录下的所有文件名System.out.println("返回File1对象代表的目录下的所有文件名");String [] arr=file1.list();for (String s:arr) {System.out.println(s);}System.out.println("返回File1对象代表的目录下的所有文件名,以File对象表示:");File []files=file1.listFiles();for (File f:files) {System.out.println(f);}}

结果显示:


 2:文件内容的读写

2.1:字节流

字节流对象,针对二级制文件,是以字符为单位进行读写。

2.1.1:读--InputStream

1.read()---读取一个字节的数据 ,返回-1就代表已经完全读取完了。

  public static void main(String[] args) throws FileNotFoundException {File file=new File("./aaa/bbb/ccc/hello.txt");try(FileInputStream inputStream=new FileInputStream(file)) {while(true){int len=inputStream.read();if(len==-1){//如果读取时负一,说明就是读取到文件末尾break;}System.out.print(len);}} catch (IOException e) {throw new RuntimeException(e);}}
}

结果显示:

这里大家产生了一个疑问了吗?一次返回一个字节,不是应该返回一个byte吗?为啥是int类型的勒?

如果返回的是byte,本身就是-128 到127 。当读取到一个-1的时候,你到底是读取到文件末尾了,还是刚好有一个值-1(0xff)。这时候为了表示这个非法状态,就约定了-1来表示,因此就需要一个使用范围大与byte的类型。

针对字符流,也是类似的设定,一次读一个char,因此此处使用int就会更适合一些,可以让字符和字节流统一。


2:read(byte[] b)---最多读取到b.length 字节的数据到b中,-1代表读完

public static void main(String[] args) {File file=new File("./aaa/bbb/ccc/hello.txt");try (FileInputStream inputStream=new FileInputStream(file)){while(true) {//一次读取多个字符byte[] arr = new byte[1024];int len = inputStream.read(arr);if(len==-1){//这里的len是你实际读取到的字节长度break;}for (int i = 0; i 

结果显示:


3.read(byte[] b ,int off, int len) ----最多读取len-off字节的数据到b中,放到off开始,返回实际读取的字节数量。-1代表已经读取完。

  public static void main(String[] args) {File file=new File("./aaa/bbb/ccc/hello.txt");try(FileInputStream inputStream=new FileInputStream(file)) {while(true) {byte[] arr = new byte[1024];int len=inputStream.read(arr,2,5);if(len==-1){break;}for (int i = 0; i 

结果显示:


2.1.2:写---OutputStream

每次写入到指定的文件中,会清除指定文件的内容。

1.write(int b)---写入要给字节的数据

 public static void main(String[] args) {try(OutputStream outputStream=new FileOutputStream("./aaa/bbb/ccc/hello.txt")) {outputStream.write(110);outputStream.write(111);outputStream.write(112);outputStream.close();//关闭文件资源}catch (IOException e){e.printStackTrace();}}

结果显示:

2.write(byte []b)---将b这个字符数组中的数据全部写入指定文件中

  public static void main(String[] args) {try(OutputStream outputStream=new FileOutputStream("./aaa/bbb/ccc/hello.txt" )){byte [] arr=new byte[]{110,111,112,113,114,115};outputStream.write(arr);outputStream.close();//关闭文件资源}catch(IOException e){e.printStackTrace();}}

结果显示:


2.2:字符

1:read()--读

 try(Reader reader=new FileReader("./aaa/bbb/ccc/hello.txt")) {while(true){char [] arr=new char[1024];int len=reader.read(arr);if(len==-1){break;}String str=new String(arr,0,len);System.out.println(str);}}catch (IOException e){e.printStackTrace();}

结果显示:

2.wirte()---写

public static void main(String[] args) {try(Writer writer=new FileWriter("./aaa/bbb/ccc/hello.txt")) {writer.write("xyz");writer.close();}catch (IOException e){e.printStackTrace();}}

结果显示:

3.FileWriter---追加 

  public static void main(String[] args) {try (FileWriter url=new FileWriter("./aaa/bbb/ccc/hello.txt",true)){url.write("word");url.close();}catch (IOException e){e.printStackTrace();}}

结果显示:


 总结:

以上就是我总结的文件IO的相关知识点,若有错误之处,请各位铁子留言纠错。若感觉不错,请一键三联。

相关内容

热门资讯

常用商务英语口语   商务英语是以适应职场生活的语言要求为目的,内容涉及到商务活动的方方面面。下面是小编收集的常用商务...
六年级上册英语第一单元练习题   一、根据要求写单词。  1.dry(反义词)__________________  2.writ...
复活节英文怎么说 复活节英文怎么说?复活节的英语翻译是什么?复活节:Easter;"Easter,anniversar...
2008年北京奥运会主题曲 2008年北京奥运会(第29届夏季奥林匹克运动会),2008年8月8日到2008年8月24日在中华人...
英语道歉信 英语道歉信15篇  在日常生活中,道歉信的使用频率越来越高,通过道歉信,我们可以更好地解释事情发生的...
六年级英语专题训练(连词成句... 六年级英语专题训练(连词成句30题)  1. have,playhouse,many,I,toy,i...
上班迟到情况说明英语   每个人都或多或少的迟到过那么几次,因为各种原因,可能生病,可能因为交通堵车,可能是因为天气冷,有...
小学英语教学论文 小学英语教学论文范文  引导语:英语教育一直都是每个家长所器重的,那么有关小学英语教学论文要怎么写呢...
英语口语学习必看的方法技巧 英语口语学习必看的方法技巧如何才能说流利的英语? 说外语时,我们主要应做到四件事:理解、回答、提问、...
四级英语作文选:Birth ... 四级英语作文范文选:Birth controlSince the Chinese Governmen...
金融专业英语面试自我介绍 金融专业英语面试自我介绍3篇  金融专业的学生面试时,面试官要求用英语做自我介绍该怎么说。下面是小编...
我的李老师走了四年级英语日记... 我的李老师走了四年级英语日记带翻译  我上了五个学期的小学却换了六任老师,李老师是带我们班最长的语文...
小学三年级英语日记带翻译捡玉... 小学三年级英语日记带翻译捡玉米  今天,我和妈妈去外婆家,外婆家有刚剥的`玉米棒上带有玉米籽,好大的...
七年级英语优秀教学设计 七年级英语优秀教学设计  作为一位兢兢业业的人民教师,常常要写一份优秀的教学设计,教学设计是把教学原...
我的英语老师作文 我的英语老师作文(通用21篇)  在日常生活或是工作学习中,大家都有写作文的经历,对作文很是熟悉吧,...
英语老师教学经验总结 英语老师教学经验总结(通用19篇)  总结是指社会团体、企业单位和个人对某一阶段的学习、工作或其完成...
初一英语暑假作业答案 初一英语暑假作业答案  英语练习一(基础训练)第一题1.D2.H3.E4.F5.I6.A7.J8.C...
大学生的英语演讲稿 大学生的英语演讲稿范文(精选10篇)  使用正确的写作思路书写演讲稿会更加事半功倍。在现实社会中,越...
VOA美国之音英语学习网址 VOA美国之音英语学习推荐网址 美国之音网站已经成为语言学习最重要的资源站点,在互联网上还有若干网站...
商务英语期末试卷 Part I Term Translation (20%)Section A: Translate ...