1.File类

File类被定义为“文件和目录路径名的抽象表示形式”,这是因为File类既可以表示“文件”也可以表示“目录”,他们都通过对应的路径来描述。通过构造函数创建一个File类对象,则该对象就是指定文件的引用,可以通过该对象对文件操作。通过File对象,可以获取文件的属性值(文件大小,能否读写,最后修改时间等)。File对象不能对文件进行读取和写入的操作,如果想要对文件进行读写,那么要使用IO流。

以下函数是File类使用示例。它的功能是,将一个文件的路径传入函数,函数判断此路径是否有文件,如果此路径没有指向任何文件或目录,那么判断这个路径里是否有".",如果有,那么创建这个路径的文件,如果没有,创建这个目录。如果有文件,则判断此路径是文件还是目录,如果是文件,则显示它的一系列属性,如果是目录,那么后续用递归的方式显示它及其子目录下的文件。文件路径有两种表示方法,一种是绝对路径,一种是相对路径。绝对路径是带盘符的,相对路径是相对于当前目录的路径。

1 public voidtestFile(String path){2 File file = newFile(path);3 if(file.exists()){4 //如果文件存在,再获取属性值5 //TODO:获取文件大小

6 if(file.isFile()){7 System.out.println("文件大小"+file.length());8

9 //TODO:文件是否可读,可写

10 System.out.println("是否能写:"+file.canWrite());11 System.out.println("是否可读:"+file.canRead());12 //TODO:获取最后修改时间13 //Date date = new Date();

14 SimpleDateFormat sfm = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");15 String str =sfm.format(file.lastModified());16 System.out.println("文件最后修改时间:"+str);17

18 }19 else if(file.isDirectory()){20 System.out.println("sdfsf");21 this.listFiles(file);22 //这个函数递归列出所有子目录及文件,在后续会有提及

23 }24 }else{25 System.out.println("文件不存在"+path);26 if(path.contains(".")){27 try{28 //创建文件

29 file.createNewFile();30 } catch(IOException e) {31 //TODO Auto-generated catch block

32 e.printStackTrace();33 }34 }else{35

36 //创建目录:file.mkdir(); 创建单目录37 //file.mkdirs();循环创建目录,没有的话可以创建上层目录

38 file.mkdirs();39 }40 }41 }

以下是递归调用listFiles(file)重载递归的函数实现。思想是先用listFiles获取当前目录下的所有列表,显示所有列表的名字,如果当前列表还是个目录,那么调用自身,进行子目录的遍历输出。

1 public voidlistFiles(File file){2 File [] files = file.listFiles();//获取当前目录下所有列表

3 for(File one :files){4 System.out.println("名字:" +one.getName());5 //TODO:如果是目录,继续遍历列出

6 if(one.isDirectory()){7 listFiles(one);8 }9 }10 }

2.字节流

字节流抽象类是InputStream和OutputStream,它们的实现的子类是FileInputStream和FileOutputStream。此处我们使用FileInputStream和FileOutPutStream解决文件读写问题。读入的思想是当需要把文件的内容读入程序时,要申明一个Byte字节数组,将FileInputStream对象读入数组。当没读完的时候,返回读取的长度。当读完的时候,返回-1。当使用完流的时候,要记得关闭流。FileOutputStream写的时候也是需要将写的东西转换为Byte数组写入文件,写完关闭流。

1 public static void Input(String path) throwsIOException {2 //构建一个InputStream对象 1、打开流

3 FileInputStream fin = newFileInputStream(path);4 byte[] buf = new byte[1024];5 int iread = 0;//读取的实际长度6 //TODO:2、读取文件内容

7 while((iread = fin.read(buf)) != -1){8 System.out.println(newString(buf));9 System.out.println("*****************我已读"+iread+"**************");10 }11 //TODO:3、关闭流

12 fin.close();13 }14 public static void Output(String path) throwsIOException {15 //1.打开

16 FileOutputStream oup = newFileOutputStream(path);17 String string = "道可道非常道";18 //2.写

19 oup.write(string.getBytes());20 //3.关闭

21 oup.close();22 }

当读完文件之后立刻要写的时候,我们要注意一个问题,就是最后一次存入的时候,可能已经数组里的内容比最后一次读入的多,那么就会最后一次多输出一些上一次读入数组时存的数据。为了解决这个问题,我们采用三个参数的write方式,避免出现乱码。

public static void ReadAndWrite() throwsIOException{//1、打开

FileInputStream fin = new FileInputStream("d:\\uft.txt");

FileOutputStream fout= new FileOutputStream("d:\\www.txt");//一个读一个写,一块一块操作

int iread = 0;byte [] buf = new byte[200];while((iread = fin.read(buf))!=-1){

fout.write(buf,0,iread);

System.out.println(newString(buf));

}//关闭

fin.close();

fout.close();

}

3.字符流

字符流:操作的数据单元是16位字符,Reader、Writer  文本文件。思想跟字节流类似,不同的是我们使用的字符流FileReader类继承于Reader接口,字符流FileWriter类继承于Writer接口。具体的操作步骤也是打开流,操作流,关闭流的步骤。

1 public static void Fileread(String path) throwsIOException{2 //1、打开流

3 FileReader fin = newFileReader(path);4 //2、

5 char[] buf = new char[100];//读取的数据

6 int iread = 0;7 while((iread = fin.read(buf)) !=-1){8 String str = newString(buf);9 System.out.println("[读了"+iread+"]"+str.substring(0, iread));10 }11 //3、

12 fin.close();13 }14 public static void testOut(String path,String str) throwsIOException{15 FileWriter fr = new FileWriter(path,true);16 fr.write(str);17 fr.close();18 System.out.println("*******************输出完毕!!!*********************");19 }

当需要读完了立马就输入文件的时候也是需要注意之前字节流的那个问题,写的时候要用那个三个参数的write函数,不然会将数组里的所有东西存入文件,会存入多余数据。

public static void testIO(String inPath,String outPath) throwsException{//d:\红鲤鱼.txt ->d:\红鲤鱼.out2.txt//1

FileReader fin = newFileReader(inPath);

FileWriter fout= newFileWriter(outPath);//2

char[] buf = new char[100];//读取的数据

int iread = 0;while((iread = fin.read(buf))!=-1){

String str= newString(buf);

fout.write(buf,0,iread);

System.out.println("["+iread+"]"+str.substring(0, iread));

}//3

fin.close();

}

4.带缓冲的字符流

BufferedReader和BufferedWriter建立的时候需要传入一个Writer或者Reader,构造函数也可以指定缓冲区大小。也就是,BufferedReader是高层流,FileReader是底层流。最后要关闭的时候,要先关闭高层流再关闭底层流。

public static void testOut2() throwsIOException{

StringWriter out= newStringWriter();

BufferedWriter fout= new BufferedWriter(out,3);

String string= "ABCDEFG哈哈哈";for(charc:string.toCharArray()){

fout.write(c);

System.out.println(out.getBuffer().toString());

}

}public static void testIoBuffer(String path1,String path2) throwsException{

FileReader in= newFileReader(path1);

BufferedReader fin= newBufferedReader(in);

FileWriter out= new FileWriter(path2,true);

BufferedWriter fout= newBufferedWriter(out);

String s;while((s =fin.readLine())!=null){

fout.write(s);

fout.newLine();

System.out.println(s);

}//关闭

fout.close();

fin.close();

out.close();

in.close();

}

java本地读取文件的io类_Java File类与文件IO流总结相关推荐

  1. 如何删除java里的类_java File类创建和删除目录详解

    你知道java File类创建和删除目录应该如何实现吗?其实这个还是非常简单的,下面就一起来通过简单的文章进行一下了解吧. File类除了对文件的创建和删除之外,还能够创建和删除目录,创建目录需要调用 ...

  2. java 查看文件属性_java File类获取文件属性详解

    你知道java File类获取文件属性方法吗?下面的文章要给大家讲解的就是这个方面的内容,希望下面的内容可以对你有所帮助哦. 在Java中获取文件属性信息的第一步是先创建一个File类对象并指向一个已 ...

  3. java IO(一):File类

    1.File类简介 File类位于java.io包中.它面向文件层次级别操作.查看文件,而字节流.字符流操作数据时显然比之更底层. 学习File类包括以下几个重点:文件路径.文件分隔符.创建文件(目录 ...

  4. java高级类_Java高级类特性(一)

    权限类内同包不同包子类不同包非子类 private √ × × × default √ √ × × protected √ √ √ × public √ √ √ √ 四.super关键字的使用 pac ...

  5. linux用file查看文件类型,Linux怎么使用file命令识别文件类型

    file是通过查看文件的头部内容,来获取文件的类型.使用file命令可以知道某个文件究竟是二进制(ELF格式)的可执行文件, 还是Shell Script文件,或者是其它的什么格式.那么Linux怎么 ...

  6. java file类详解_Java File类详解及IO介绍及使用

    我是一个CPU:这个世界慢!死!了!,可以感受到CPU,内存和硬盘之间的速度比较. 文件的本质 OS(操作系统)的目的就是可以让上层程序可以通过一种统一的方式去拿到无论什么磁盘里的文件(即一段字节流) ...

  7. java读取文件中的字符串_java中怎样将文件的内容读取成字符串

    java中怎样将文件的内容读取成字符串 mip版  关注:68  答案:3  悬赏:10 解决时间 2021-01-18 02:36 已解决 2021-01-17 04:47 java中怎样将文件的内 ...

  8. 关于java本地读取文件和打包成jar上传到服务器读取的区别

    这个问题在工作中经常遇到,做个笔记以免忘记! 通常我们在开发中本地读取文件在类似在springboot目录下如下: 我们可以各种方法读取到文件路径并且包括文件内容,但是项目打成jar上传到服务器后,很 ...

  9. java 文件大小统计工具类_Java获取文件大小,文件夹内文件个数的工具类

    package cn.edu.hactcm.cfcms.utils; import java.io.File; import java.io.FileInputStream; import java. ...

最新文章

  1. 动画原理与实现 浅析
  2. html中如何实现放大动画,CSS3实现点击放大的动画实例
  3. php 错误记录_PHP中把错误日志保存在系统日志中(Windows系统)
  4. [错误总结]升级spring-boot->2.6.2|hiberate->5.4.33.Final|spring cloud->2021.0.0 |spring admin->2.4.1
  5. 利用Opencv在PictureControl中显示照片
  6. 康奈尔机器人的肌肉是爆米花做的,果然很有爆发力 | ICRA 2018
  7. html meta标签作用
  8. 17届智能汽车竞赛无线充电组的方案研究(非正经)
  9. 虚拟机没有显示ip地址
  10. 【无机纳米材料科研制图——Photoshop 0403】PS使用索套工具和魔棒工具框出选区
  11. 消逝的光芒 Dying Light for Mac 跑酷僵尸游戏 动作生存游戏
  12. android audiorecorder有哪些功能,android AudioRecorder简单心得分享
  13. 来自MyBatis不一样收获结果的探索之旅
  14. 初中作文计算机想象作文,初中想象作文600
  15. Arai2自动添加tracker链接的方法
  16. DIY钢铁侠电动开合
  17. 大数问题:大数加法 与 大数乘法 最简单大数乘法
  18. 秃头大牛一文竟然就把SpringCloudStream(SCS)给讲明白了?
  19. 使用Formatter格式化数据
  20. 美瞳赛道,只做得好看跑不赢

热门文章

  1. oracle基于dblink创建视图,【案例】Oracle dblink 数据库连接dblink insert操作数据类型发生改变...
  2. Jmeter内置函数功能(五)
  3. 在Ubuntu虚拟机中编译运行C程序
  4. Python基础教程:in和not in操作
  5. 为什么线粒体DNA突变率高?
  6. opencv cv2.LUT()(使用查找表中的值填充输出数组)
  7. 欢迎使用CSDN-markdown
  8. Ubuntu16.04安装ROS时,sudo rosdep init报错,Error: cannot download default sources list from:
  9. 分布式事务原理及实战seata(转自微信公众号 终码一生 )
  10. 黑马程序员pink老师前端入门教程,零基础必看的JavaScript基础语法视频教程(jQuery1)