使用java io流实现对文本文件,io流读取写入文件步骤

  使用java io流实现对文本文件,io流读取写入文件步骤

  00-1010 1.文件类概述及构造方法1.2文件类创建功能1.3文件类判断及获取功能1.4文件类删除功能2。递归2.1递归2.2阶乘递归2.3递归遍历目录3。IO流3.1 IO流概述和分类3.2字节流写数据3.3字节流写数据三种方式3.4字节流写数据两个小问题3.5字节流写数据加异常处理3.6字节流读数据(一次一个字节)3.7字节流复制文本文件3.8字节流读数据(一次一个字节数组数据)3.9字节流复制图片摘要

  

目录

  00-1010File类介绍它是文件和目录路径名的抽象表示。文件和目录可以通过文件封装成对象。对于file,它封装的不是一个真正的文件,而只是一个路径名。它可能存在,也可能不存在。在未来,需要通过具体的操作将这一路径的内容转化为具体的File类的构造方法

  示例代码公共类file demo 01 { public static void main(string[]args){//file(string pathname):通过将给定的路径名字符串转换为抽象路径名来创建一个新的文件实例。File f1=新文件( e : yijizhichang Java . txt );system . out . println(f1);//File (stringparent,stringchild):从父路径名字符串和子路径名字符串创建一个新的文件实例。File f2=新文件( E:\yijizhichang , Java . txt );system . out . println(F2);//File(File parent,String child):从父抽象路径名和子路径名字符串创建一个新的文件实例。文件f3=新文件( E: 一级之长);File f4=新文件(f3, Java . txt );system . out . println(F4);}}这是我的目录。当您执行代码时,您将目录更改为您自己的计算机。但是,目录最好是全英文的,不能包含中文。

  

1.File类

方法分类

  示例代码公共类file demo 02 { public static void main(string[]args)抛出IO异常{//需求1:我要在e: yijizhichang目录下创建一个文件Java . txt file f1=new file( e : yijizhichang Java . txt );system . out . println(f1 . create new file());system . out . println(-);//需求二:我想在目录e3360 yijizhichang下创建一个目录Java file 2=new file( e : yijizhichang Java se );system . out . println(F2 . mkdir());system . out . println(-);//需求三:我想在目录e3360 Yijizhichang下创建一个多级目录Java web html file F3=new file( e : Yijizhichang Java web html );//system . out . println(F3 . mkdir());system . out . println(F3 . mkdirs());system . out . println(-);//需求四:我要在e3360 yijizhichang的目录下创建一个文件javase . txt file F4=new file( e : yijizhichang javase . txt );//system . out . println(F4 . mkdir());system . out . println(F4 . create new file());}}}同理,大家也要把相关目录改成自己的。

  

1.1File类概述和构造方法

判断功能

  获取功能

  示例代码公共类FileDemo04 {公共静态void main(String[] a

  rgs) {//创建一个File对象File f = new File("myFile\java.txt");System.out.println(f.isDirectory());System.out.println(f.isFile());System.out.println(f.exists());System.out.println(f.getAbsolutePath());System.out.println(f.getPath());System.out.println(f.getName());System.out.println("--------");File f2 = new File("E:\yijizhichang");String[] strArray = f2.list();for(String str : strArray) {System.out.println(str);}System.out.println("--------");File[] fileArray = f2.listFiles();for(File file : fileArray) {if(file.isFile()) {System.out.println(file.getName());}}}}

  

1.4File类删除功能

方法分类

  示例代码

public class FileDemo03 {public static void main(String[] args) throws IOException {//需求1:在当前模块目录下创建java.txt文件File f1 = new File("myFile\java.txt");//需求2:删除当前模块目录下的java.txt文件System.out.println(f1.delete());System.out.println("--------");//需求3:在当前模块目录下创建yijizhichang目录File f2 = new File("myFile\yijizhichang");//需求4:删除当前模块目录下的yijizhichang目录System.out.println(f2.delete());System.out.println("--------");//需求5:在当前模块下创建一个目录yijizhichang,然后在该目录下创建一个文件java.txtFile f3 = new File("myFile\yijizhichang");File f4 = new File("myFile\yijizhichang\java.txt");//需求6:删除当前模块下的目录yijizhichangSystem.out.println(f4.delete());System.out.println(f3.delete());}}
绝对路径和相对路径的区别:绝对路径:完整的路径名,不需要任何其他信息就可以定位它所表示的文件。例如:E:yijizhichangjava.txt相对路径:必须使用取自其他路径名的信息进行解释。例如:myFile\java.txt

  

2.递归

  

2.1递归

递归的介绍以编程的角度来看,递归指的是方法定义中调用方法本身的现象把一个复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算递归的基本使用
public class DiGuiDemo {public static void main(String[] args) {//回顾不死神兔问题,求第20个月兔子的对数//每个月的兔子对数:1,1,2,3,5,8,...int[] arr = new int[20];arr[0] = 1;arr[1] = 1;for (int i = 2; i < arr.length; i++) {arr[i] = arr[i - 1] + arr[i - 2];}System.out.println(arr[19]);System.out.println(f(20));}public static int f(int n) {if(n==1 n==2) {return 1;} else {return f(n - 1) + f(n - 2);}}}
递归的注意事项:递归一定要有出口。否则内存溢出递归虽然有出口,但是递归的次数也不宜过多。否则内存溢出

  

2.2递归求阶乘

案例需求
​ 用递归求5的阶乘,并把结果在控制台输出

  

代码实现
public class DiGuiDemo01 {public static void main(String[] args) {//调用方法int result = jc(5);//输出结果System.out.println("5的阶乘是:" + result);}//定义一个方法,用于递归求阶乘,参数为一个int类型的变量public static int jc(int n) {//在方法内部判断该变量的值是否是1if(n == 1) {//是:返回1return 1;} else {//不是:返回n*(n-1)!return n*jc(n-1);}}}

  

2.3递归遍历目录

案例需求
​ 给定一个路径(E:\yijizhichang),通过递归完成遍历该目录下所有内容,并把所有文件的绝对路径输出在控制台

  

代码实现
public class DiGuiDemo02 {public static void main(String[] args) {//根据给定的路径创建一个File对象File srcFile = new File("E:\yijizhichang");//调用方法getAllFilePath(srcFile);}public static void getAllFilePath(File srcFile) {//获取给定的File目录下所有的文件或者目录的File数组File[] fileArray = srcFile.listFiles();//遍历该File数组,得到每一个File对象if(fileArray != null) {for(File file : fileArray) {//判断该File对象是否是目录if(file.isDirectory()) {//是:递归调用getAllFilePath(file);} else {//不是:获取绝对路径输出在控制台System.out.println(file.getAbsolutePath());}}}}}

  

3.IO流

  

3.1 IO流概述和分类

IO流介绍IO:输入/输出(Input/Output):是一种抽象概念,是对数据传输的总称。也就是说数据在设备间的传输称为流,流的本质是数据传输IO流就是用来处理设备间数据传输问题的。常见的应用:文件复制;文件上传;文件下载IO流的分类按照数据的流向输入流:读数据输出流:写数据按照数据类型来分字节流字节输入流字节输出流字符流字符输入流字符输出流IO流的使用场景如果操作的是纯文本文件,优先使用字符流如果操作的是图片、视频、音频等二进制文件。优先使用字节流如果不确定文件类型,优先使用字节流。字节流是万能的流

  

3.2字节流写数据

字节流抽象基类InputStream:这个抽象类是表示字节输入流的所有类的超类OutputStream:这个抽象类是表示字节输出流的所有类的超类子类名特点:子类名称都是以其父类名作为子类名的后缀字节输出流FileOutputStream(String name):创建文件输出流以指定的名称写入文件使用字节输出流写数据的步骤创建字节输出流对象(调用系统功能创建了文件,创建字节输出流对象,让字节输出流对象指向文件)调用字节输出流对象的写数据方法释放资源(关闭此文件输出流并释放与此流相关联的任何系统资源)示例代码
public class FileOutputStreamDemo01 {public static void main(String[] args) throws IOException {//创建字节输出流对象FileOutputStream fos = new FileOutputStream("myByteStream\fos.txt");fos.write(97);//最后都要释放资源fos.close();}}

  

3.3字节流写数据的三种方式

写数据的方法分类

  示例代码

public class FileOutputStreamDemo02 {public static void main(String[] args) throws IOException {FileOutputStream fos = new FileOutputStream("myByteStream\fos.txt");fos.write(bys,1,3);//释放资源fos.close();}}

  

3.4字节流写数据的两个小问题

字节流写数据如何实现换行windows:rnlinux:nmac:r字节流写数据如何实现追加写入public FileOutputStream(String name,boolean append)创建文件输出流以指定的名称写入文件。如果第二个参数为true ,则字节将写入文件的末尾而不是开头示例代码
public class FileOutputStreamDemo03 {public static void main(String[] args) throws IOException {//创建字节输出流对象FileOutputStream fos = new FileOutputStream("myByteStream\fos.txt",true);//写数据for (int i = 0; i < 10; i++) {fos.write("hello".getBytes());fos.write("rn".getBytes());}//释放资源fos.close();}}

  

3.5字节流写数据加异常处理

异常处理格式​try-catch-finally​
try{可能出现异常的代码;}catch(异常类名 变量名){异常的处理代码;}finally{执行所有清除操作;}
finally特点被finally控制的语句一定会执行,除非JVM退出示例代码
public class FileOutputStreamDemo04 {public static void main(String[] args) {//加入finally来实现释放资源FileOutputStream fos = null;try {fos = new FileOutputStream("myByteStream\fos.txt");fos.write("hello".getBytes());} catch (IOException e) {e.printStackTrace();} finally {if(fos != null) {try {fos.close();} catch (IOException e) {e.printStackTrace();}}}}}

  

3.6字节流读数据(一次读一个字节数据)

字节输入流FileInputStream(String name):通过打开与实际文件的连接来创建一个FileInputStream ,该文件由文件系统中的路径名name命名字节输入流读取数据的步骤创建字节输入流对象调用字节输入流对象的读数据方法释放资源示例代码
public class FileInputStreamDemo01 {public static void main(String[] args) throws IOException {//创建字节输入流对象//FileInputStream(String name)FileInputStream fis = new FileInputStream("myByteStream\fos.txt");int by;while ((by=fis.read())!=-1) {System.out.print((char)by);}//释放资源fis.close();}}

  

3.7字节流复制文本文件

案例需求
​ 把E:yijizhichang\窗里窗外.txt复制到模块目录下的窗里窗外.txt

  

实现步骤复制文本文件,其实就把文本文件的内容从一个文件中读取出来(数据源),然后写入到另一个文件中(目的地)数据源:
​ E:\yijizhichang\窗里窗外.txt --- 读数据 --- InputStream --- FileInputStream

  

目的地:
​ myByteStream\窗里窗外.txt --- 写数据 --- OutputStream --- FileOutputStream

  

代码实现
public class CopyTxtDemo {public static void main(String[] args) throws IOException {//根据数据源创建字节输入流对象FileInputStream fis = new FileInputStream("E:\yijizhichang\窗里窗外.txt");//根据目的地创建字节输出流对象FileOutputStream fos = new FileOutputStream("myByteStream\窗里窗外.txt");//读写数据,复制文本文件(一次读取一个字节,一次写入一个字节)int by;while ((by=fis.read())!=-1) {fos.write(by);}//释放资源fos.close();fis.close();}}

  

3.8字节流读数据(一次读一个字节数组数据)

一次读一个字节数组的方法public int read(byte[] b):从输入流读取最多b.length个字节的数据返回的是读入缓冲区的总字节数,也就是实际的读取字节个数示例代码
public class FileInputStreamDemo02 {public static void main(String[] args) throws IOException {//创建字节输入流对象FileInputStream fis = new FileInputStream("myByteStream\fos.txt");byte[] bys = new byte[1024]; //1024及其整数倍int len;while ((len=fis.read(bys))!=-1) {System.out.print(new String(bys,0,len));}//释放资源fis.close();}}

  

3.9字节流复制图片

案例需求
​ 把E:\yijizhichang\mn.jpg复制到模块目录下的mn.jpg

  

实现步骤根据数据源创建字节输入流对象根据目的地创建字节输出流对象读写数据,复制图片(一次读取一个字节数组,一次写入一个字节数组)释放资源代码实现
public class CopyJpgDemo {public static void main(String[] args) throws IOException {//根据数据源创建字节输入流对象FileInputStream fis = new FileInputStream("E:\yijizhichang\mn.jpg");//根据目的地创建字节输出流对象FileOutputStream fos = new FileOutputStream("myByteStream\mn.jpg");//读写数据,复制图片(一次读取一个字节数组,一次写入一个字节数组)byte[] bys = new byte[1024];int len;while ((len=fis.read(bys))!=-1) {fos.write(bys,0,len);}//释放资源fos.close();fis.close();}}

  

总结

本文主要给大家介绍了Java中文件的读写方法。主要包括文件File类、递归以及IO流,并且通过大量的案例加以说明。这里需要说明的是:本文中的代码所涉及到的路径或者文件都是本人的,大家得换成自己的,并且大家可以在网上自行找一些材料作为读入或者写入的材料,不过路径最好是英文的,不要包含中文,防止JVM读取失败。这也就是本人没有贴出运行示意图的原因。不过本文中的代码都是正确的,如果大家粘贴在自己编译器报错,可能是你的路径没有,或者文件不存在,最多就是需要自己将需要的包导进去。

  到此这篇关于Java中文件的读写方法之IO流详解的文章就介绍到这了,更多相关Java IO流内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: