热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java基础练习—IO流(高级)

文章目录一、File1.1构造方法1.2成员方法1.2.1创建功能1.2.2删除功能1.2.3判断功能1.2.4获取功能1.2.5修改名字的方法1.2.6其他方法案例演示1.2.7

文章目录

  • 一、File
    • 1.1 构造方法
    • 1.2 成员方法
      • 1.2.1 创建功能
      • 1.2.2 删除功能
      • 1.2.3 判断功能
      • 1.2.4 获取功能
      • 1.2.5 修改名字的方法
      • 1.2.6 其他方法
      • 案例演示
      • 1.2.7 IO流分类
      • 案例1 — 使用字符流复制文本文件
      • 案例2 — 使用字节流复制图片(也可复制文本文件)

一、File

文件和目录路径名的抽象表达式,File类的实例是不可变的。

1.1 构造方法

  1. File(File parent, String child) 根据指定的父路径对象和文件名创建file对象。
    代码示例:
File parent = new File("d:\\a"); //父路径是文件夹a
File f = new File(parent, "b.txt"); //创建一个新文件所在路径对象,指向父路径下的b.txt
  1. File(String parent, String child)根据指定的父路径和文件名创建File对象。与上一个构造方法的区别在于,这个方法是直接指定了字符串类型的父路径,没有创建父路径对象
    代码示例:
File f = new File("e:\\a", "b.txt"); //创建一个新文件所在路径对象,指向父路径下的b.txt
File f = new File("e:\\", "a\\b.txt"); //两种方法效果一致。
  1. File(String name)将指定路径转换成一个File对象。(File对象只是指向文件路径而已,并不创建实际文件)

1.2 成员方法

绝对路径:固定不可改变的路径,以盘符开头。
相对路径:相对某个参照物,不能以盘符开头。在eclipse中相对路径对应于当前项目的根目录。

1.2.1 创建功能

  1. boolean createNewFile()当指定文件不存在时创建文件并返回true,否则返回false
  2. boolean mkdir()当指定文件夹不存在时创建文件夹并返回true,否则返回false
  3. boolean mkdirs()创建指定文件夹,当指定文件夹所在的目录不存在时,顺道一块创建了。
    代码示例:
FIle f = new File("c\\d\\e"); //创建一个新文件夹所在路径对象,指向父路径下的e
System.out.println(f.mkdirs());

1.2.2 删除功能

  1. boolean delete()删除一个文件夹,这个文件夹下不能有子文件或子文件夹

1.2.3 判断功能

  1. boolean exists()判断文件或文件夹是否存在,若果存在返回true,如果不存在返回false
  2. boolean isAbsolute()判断File对象指向的路径是否是绝对路径,若果存在返回true,如果不存在返回false
  3. boolean isDirectory()判断File对象指向的路径是否是文件夹,若果存在返回true,如果不存在返回false
  4. boolean isFile()判断File对象指向的路径是否是文件,若果存在返回true,如果不存在返回false
  5. boolean isHidden()判断File对象指向的路径是否有隐藏属性,若果存在返回true,如果不存在返回false

1.2.4 获取功能

  1. File getAbsolute()File对象的形式返回其所指向的绝对路径
  2. String getAbsolute()String的形式返回File对象的绝对路径
  3. String getParent()获取父路径。
  4. File getParentFile()获取父路径对象
    代码示例
File parent = new File("b"); //创建父路径对象,父路径为b文件夹
File f = new File(parent, "c.txt"); //创建一个新文件所在路径对象,指向父路径下的c.txt
if( !parent.exists()){ //判断父路径是否存在,若不存在则进行下一步
	parent.mkdirs(); //创建父路径目录
}
System.out.println(f.createFile()); //创建文件
System.out.println(f.getParent()); //获取父路径
System.out.println(f.getParentFile()); //获取父路径File对象

  1. String getName()获取文件和文件夹的名称。
  2. String getPath()返回创建File对象时给的路径。
  3. long lastModified()毫秒形式返回最后修改的时间。

1.2.5 修改名字的方法

  1. boolean renameTo(File dest)将当前File对象的路径修改为传入的File对象所指向的路径。修改成功返回true,修改失败返回false
    代码示例:
File f = new File("abc.txt");
File f2 = new File("cba.txt");
System.out.println(f.renameTo(f2)); //修改的文件路径不能存在,即不能同名,如果存在同名,则修改失败。

1.2.6 其他方法

  1. String[] list()返回当前路径下所有的文件和文件夹名称
  2. File[] listFiles()返回的是路径名的数组
  3. static File[] listRoots()返回所有的盘符,列出可用的文件系统根目录。

案例演示

public static void main(String[] args){
	File f = new File("e:\\FileDemo");
	method01(f); 
	method02(f);
}

//输出指定目录下所有的".java"文件(分含子目录和不含子目录,这里是含子目录的)
public static void method01(File file){ 
	if(file.isDirectory()){ //是不是目录,是-下一步
	File[] files = file.listFiles(); //返回该目录下的路径名数组
		for(File f : files){ //增强for循环对路径名数组进行遍历
			if(f.isFile()){ //对遍历的每一个元素判断是不是文件,是-下一步
				if(f.getName().endsWith(".java")){ 判断文件名是不是以.java结尾,是-下一步
					System.out.println(f.getName()); //输出名字
					}
			}else{ //不是
				method(f); //递归方法,重新遍历
			}
		}
	}
}

//删除指定的目录(包含子目录),如果要删除一个目录,则需要先删除这个目录下的所有文件和目录
public static void method02(File file){ 
	if(file.isDirectory()){ //是不是目录,是-下一步
	File[] files = file.listFiles(); //返回该目录下的路径名数组
		for(File f : files){ //增强for循环对路径名数组进行遍历
			if(f.isFile()){ //对遍历的每一个元素判断是不是文件,是-下一步
				if(f.isFile()){ 判断文件名是不是以.java结尾,是-下一步
					System.out.println(f.getName()); //输出名字
					f.delete(); //删除这个文件
					}
			}else(f.isDirectory()){ //不是
				method(f); //递归方法,重新遍历
			}
		}
		System.out.println(file.getName()); //循环结束后输出名字
		file.delete(); //循环结束后删除自己
	}
}

1.2.7 IO流分类

Java基础练习 — IO流(高级)

案例1 — 使用字符流复制文本文件

//1. 创建字符输入流对象
FileReader fr = new FileReader("IODemo.java"); //源文件

//2. 创建字符输出流对象
FileWriter fw = new FileWriter("e:\\demo.java"); //目的地

//3-1. 一次读写一个字符
int ch;
while((ch = fr.read()) != -1){
	fw.write(ch);
	fw.flush();
}

//释放资源
fw.close();
fr.close();

//3-2. 一次读写一个字符数组
int len; //存一次读到的字符个数
char[] chs = new char[1024]; //每一次读1024个长度的字符(有可能读不到1024个),并返回char[]
while((len = fr.read()) ! = -1){ //返回每次真实读到的字符个数,判断是否为-1,-1表示没有字符可读了
	fw.write(chs, 0, len); //写入chs中的元素,有几个写几个,len为有效元素的个数,即真实读到的元素个数
	fw.flush();
}

//释放资源
fw.close();
fr.close();

案例2 — 使用字节流复制图片(也可复制文本文件)

//创建字节输入流对象
FileInputStream fis = new FileInputStream("photo.jpg");

//创建字节输出流对象
FileOutputStream fos = new FileOutputStream("e:\\photo.jpg");

//一次读写一个字节数组
int len;
byte[] bys = new byte[1024];
while((len = fis.read()) ! = -1){
	fos.write(bys, 0, len); //直接存储到文件中,不需要flush();
}

//释放资源
fos.close();
fis.close();

推荐阅读
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
  • Java SE从入门到放弃(三)的逻辑运算符详解
    本文详细介绍了Java SE中的逻辑运算符,包括逻辑运算符的操作和运算结果,以及与运算符的不同之处。通过代码演示,展示了逻辑运算符的使用方法和注意事项。文章以Java SE从入门到放弃(三)为背景,对逻辑运算符进行了深入的解析。 ... [详细]
  • ***byte(字节)根据长度转成kb(千字节)和mb(兆字节)**parambytes*return*publicstaticStringbytes2kb(longbytes){ ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
author-avatar
七仙女跳皮筋
这个家伙很笨,什么也不会!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有