1.Java中的IO流

1.1IO流所解决的问题

解决之前的数据存储在内存中,不能永久保存。

因此需要将数据存储在硬盘上,文件是数据存储的载体。

如何实现将数据保存到文件中:

思路:

1 定位到文件:对文件进行相应的操作:删除,修改 , 重命名,获取文件属性信息 但是不能读写文件

2 读写文件的数据:IO流技术 可以实现对文件中的数据进行读写

1.2File类

  • File类及其与IO操作相关的类都位于java.io包下,表示文件和目录路径名的抽象表示。代表系统中

的文件对象(文件、文件夹)

  • File类提供了如:定位文件 获取文件本身的信息,删除文件 创建文件 创建目录等功1.

1.3常见的API

File类的对象的创建:

File(File parent, String

child)

从父抽象路径名和子路径名字符串创建新的 File 实例。

File(String pathname)

通过将给定的路径名字符串转换为抽象路径名来创建新的

File 实例。

File(String parent, String

child)

从父路径名字符串和子路径名字符串创建新的 File 实例。

File(File parent, String

child)

从父抽象路径名和子路径名字符串创建新的 File 实例。

File对象 可以定位到文件和文件夹

File封装的对象仅仅是一个路径名,这个路径可以存在 也可以不存在

绝对路径和相对路径

绝对路径: 从盘符开始

File f1 = new File("D:\\src\\a.txt")

相对路径:不带盘符 默认直接到当前工程下的目录寻找文件

File f2 = new File("模块名称\\a.txt")

public static void main(String[] args) {
// 1 创建File对象(指定文件路径)
File f1 = new File("D:\\code\\1.jpg");
File f2 = new File("D:/code/1.jpg");
long size1 = f1.length();//获取文件的大小
long size2 = f2.length();// 单位:字节
System.out.println(size1 +"---"+size2);
// 屏蔽系统之间的路径分隔符的差异 File.separator
File f3 = new File("d:"+File.separator+"code"+File.separator+"1.jpg");
System.out.println(f3.length());
// 以上在表示文件路径的时候 我们采用的都是绝对路径
File f4 = new
File("D:\\workSpace\\idea\\JavaSEDemo\\day_06\\src\\1.jpg");
File f5 = new File("day_06/src/1.jpg");// 相对路径 相对于当前工程
System.out.println(f4.length() +"---"+ f5.length());
//使用file表示一个目录
File f6 = new File("D:\\code");
File f7= new File("day_06/src");
System.out.println(f6.exists());// 表示路径是否存在
System.out.println(f7.exists());
}
//File对象的其他创建方式
//f8表示f6这个父路径下的1.jpg文件
File f8 = new File(f6,"1.jpg");
File f9 = new File("D:\\code","1.jpg");
System.out.println(f8.length());
System.out.println(f9.length());

判断文件类型 获取文件信息

public static void main(String[] args) {
// 1 使用绝对路径创建一个File对象
File file1 = new File("D:/code/1.jpg");
File file2 = new File("day_06/src/1.jpg");
// a 获取他的绝对路径
System.out.println(file1.getAbsolutePath());
System.out.println(file2.getAbsolutePath());
// b 获取文件定义时使用的路径
System.out.println(file1.getPath());
System.out.println(file2.getPath());
//c 获取文件的名称 带文件的扩展名
System.out.println(file1.getName());
System.out.println(file2.getName());
//d 获取文件的大小 返回的是字节数
System.out.println(file2.length());
//e 获取文件的最后的修改时间 返回的是距离1970年1月1日 00:00:00 一个毫秒值
long time = file2.lastModified();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String modifiedTime = sdf.format(time);
System.out.println(modifiedTime);
// f 判断File对象表示的是一个文件还是目录
System.out.println(file1.isDirectory());//false
System.out.println(file2.isFile());//true
System.out.println(file1.exists());//true
}

创建文件 删除文件

public static void main(String[] args) throws IOException {
File file= new File("day_06/src/a.txt");
if(!file.exists()){//不存在 则创建一个新的文件
file.createNewFile();
}
File file1 = new File("day_06/src/a");
if (!file1.exists()){
file1.mkdir();
}
File file2 = new File("day_06/src/a/b/c/d");
if (!file2.exists()){
file2.mkdirs();
}
}

删除文件

使用delete删除目录的时候 只能删除文件和空目录

delete方法删除的时候 直接删除 不经过回收站

public static void main(String[] args) throws IOException {
File file= new File("day_06/src/a.txt");
if(!file.exists()){//不存在 则创建一个新的文件
file.createNewFile();
}
File file1 = new File("day_06/src/a");
if (!file1.exists()){
file1.mkdir();
}
File file2 = new File("day_06/src/a/b/c/d");
if (!file2.exists()){
file2.mkdirs();
}
// 删除文件
file.delete();
file2.delete();
File file3 = new File("day_06/src/a");
file3.delete();
}

遍历文件夹

public static void main(String[] args) {
//1 定位到一个目录
File f1 = new File("D:/code");
String[] names = f1.list();
for (String name : names){
System.out.println(name);
}
// 2 一级文件对象
// 可以获取当前目录下的一级目录 到一个文件对象数组中
File[] files = f1.listFiles();
for (File f : files){
System.out.println(f.getAbsolutePath());
}
}

listFiles方法的注意事项:

  • 当调用者不存在时,会返回null

  • 当调用者是一个文件时,返回null

  • 当调用者是一个空目录时,返回一个长度为0的数组

  • 当调用者是一个有内容的目录时,将里面所有的文件和目录的路径放在File数组中返回

  • 当调用者中包含隐藏文件是,也可以扫描到

需求: 统一一个目录下的每种文件的个数并打印:

打印的格式为:

txt:3个

doc:5个

jpg:2个

public class FileDemo5 {
public static void main(String[] args) {
// 1 定位到指定的目录
File f = new File("d:/code");
// 2 获取目录下的文件的列表
File[] files = f.listFiles();
Map<String,Integer> map = new HashMap<>();
// 3 遍历
for (File file : files){
if (file.isFile()){
String name = file.getName();
System.out.println(name);
int lastIndex = name.lastIndexOf(".");
String regx = name.substring(lastIndex +1);
System.out.println(regx);
if(map.containsKey(regx)){
map.put(regx, map.get(regx) + 1) ;
}else{
map.put(regx,1);
}
}
}
// 遍历Map 重写组织输出格式
Set<Map.Entry<String,Integer>> set = map.entrySet();
for (Map.Entry<String,Integer> entry:set){
System.out.println(entry.getKey() +":"+entry.getValue()+"个");
}
}
}

欢迎一起讨论学习!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: B'15.javaIO流分为几种?' A: 在JavaIO流分为四种类型:字节流(InputStream, OutputStream)和字符流(Reader, Writer),又分为输入流和输出流。 ### 回答2: 在 Java ,IO 流可以分为四种类型:字节流、字符流、缓冲流和数据流。 1. 字节流:字节流以字节为单位读取和写入数据,通常用于读取和写入二进制文件,如图像和音频文件。字节流分为输入流和输出流,分别用于从文件读取数据和将数据写入文件。 2. 字符流:字符流以字符为单位读取和写入数据,通常用于读取和写入文本文件。与字节流不同,字符流不仅可以读取和写入纯文本数据,还可以处理其他格式的文本数据,如 XML 和 HTML。 3. 缓冲流:缓冲流提高了 IO 操作的效率,在读写数据时预读和预写数据,将数据先存储在缓存区,再逐块传输。这些流可以加快程序处理大文件和大数据量的速度。 4. 数据流:数据流是一种特殊的字节流,可以方便地读取和写入 Java 基本数据类型和对象。它具有多种方法可以读取或写入整数、字符串、布尔值等等。 总之,Java 的 IO 流提供灵活和易于使用的方式来读取和写入数据。无论您要读取或写入二进制文件、文本文件或其他格式的数据,都可以使用适当类型的 IO 流。 ### 回答3: JavaIO流主要分为4类:输入流、输出流、字符流和字节流。 输入流用于读取数据,可分为字节输入流和字符输入流。字节输入流读取字节数据,字符输入流读取字符数据。常用的字节输入流包括FileInputStream、ObjectInputStream、ByteArrayInputStream等;常用的字符输入流包括FileReader、InputStreamReader等。 输出流用于写入数据,可分为字节输出流和字符输出流。字节输出流写入字节数据,字符输出流写入字符数据。常用的字节输出流包括FileOutputStream、ObjectOutputStream、ByteArrayOutputStream等;常用的字符输出流包括FileWriter、OutputStreamWriter等。 字符流和字节流的主要区别在于字节流是以字节为单位进行输入输出的,而字符流则是以字符为主,同时字符流会对数据进行编码解码操作,而字节流不会。 除了字节流和字符流,Java还提供了处理二进制数据的RandomAccessFile类,以及用于序列化和反序列化对象的ObjectInputStream和ObjectOutputStream类。 总之,JavaIO流提供了丰富的API和功能,开发者可以根据不同的需求选择合适的IO流实现代码功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值