目录
前言
学习bilibili黑马程序员课程后 笔记总结
一、IO流
1.1引入:
内存 中不能永久化储存数据 ,程序停止,数据丢失——>那么需要存档 存到硬盘中的文件中——>文件的位置(通过file解决) 如何传输(需要IO流)
file:表示系统中的文件或者文件夹的路径
注意:file类只能对文件本身进行操作,不能读写文件里面存储的数据
1.2 IO流:
定义:储存和读取数据的解决方案。
作用:用于读写文件中的数据(可以读写文件,或网络中的数据...)
写(output)——> 程序中的数据保存到本地文件中去
读(input)<—— 本地文件中的数据加载到程序中去
流的分类:
按照流的方向分:
按照操作文件类型分:
纯文本文件:Windows自带的记事本打开能读得懂,例如:txt文件 md文件 xml文件 lrc文件(Word和Excel不是纯文本文件)
Java如何实现对文件和目录的操作?
Java作为一种面向对象语言,自然是通过对象,java将文件/目录的各种信息进行封装,如此就诞生了一个对象。通过对这个对象操作,就能获取文件的各种信息,以及进行创建、删除、修改等操作。
对文件/目录的操作:
package com.bluemsun.test;
import java.io.File;
import java.io.IOException;
import java.util.List;
public class Test1 {
public static void main(String[] args) throws IOException {
File file = new File("resources");
if(!file.exists()){
file.mkdir();
}
/*boolean mkdir() 方法可以创建此抽象路径的指定目录。只能创建一级的目录,且需要父目录存在。(不能用于创建多级目录)
如果你希望创建多级目录,使用此方法结果会返回false。
boolean mkdirs() 方法可以创建此抽象路径的指定目录。可用于创建多级目录。如果父级目录不存在,按照该路径一并创建。*/
//文件操作常用方法
System.out.println("文件是否可读:" + file.canRead());
System.out.println("文件是否可写:" + file.canWrite());
System.out.println("获取文件的名字:" + file.getName());
System.out.println("获取该文件的上级目录:" + file.getParent());
System.out.println("是否是一个目录:" + file.isDirectory());
System.out.println("是否是一个文件:" + file.isFile());
System.out.println("是否隐藏:" + file.isHidden());
System.out.println("获取文件大小:" + file.length() );
System.out.println("是否存在:" + file.exists());
//文件路径
System.out.println("绝对路径:"+file.getAbsolutePath());
System.out.println("相对路径:"+file.getPath());
System.out.println("toString:"+file);
System.out.println("===============================================");
for(int i = 1; i <= 5; i++){
File file1 = new File("resources\\"+i+".txt");
if(!file1.exists()){
file1.createNewFile();
}
}
File[] fileList = file.listFiles();
/*
public String[] list() 获取当前目录下所有的"一级文件名称"到一个字符串数组中去返回。
public File[] listFiles()(常用) 获取当前目录下所有的"一级文件对象"到一个文件对象数组中去返回(重点)
*/
for(File f : fileList){
System.out.println(f.getName());
System.out.println(f);
}
}
}
效果图
二、深入探讨IO流
2.1 IO流体系
2.2字节流
FileinputStream是对InputStream的继承;FileOutputStream是对OutputStream的继承
以FileOutputStream为例
实践: 在file中输出a
“myio\\a.txt”为路径引用
嘿嘿嘿O(∩_∩)O哈哈~ 程序运行成功 好耶
原理分析:
细节总结:
IO流分类:
实践:
我们先尝试着通过java程序分步完成文件的复制。
第一步:文件–->程序:FileReader
第二步:程序–->文件:FileWriter
package com.bluemsun;
import java.io.*;
public class FileWriterAndReader {
public static void main(String[] args) throws IOException {
//=====================================================================================================
File file = new File("b.txt");
//读取文件内容
FileReader reader = new FileReader(file);
if(!file.exists()){
file.createNewFile();
}
int n = reader.read();
/*
FileReader类中对read()方法进行了重载,返回值均为int型,有参的方法,返回值即读取到的字符数,比较好理解,无参的方法返回一个0-65535范围内的整数,read的无参方法返回的int值即为读取到的字符的\u后面的十六进制转为十进制后的数
*/
System.out.println(n);
n = reader.read();
System.out.println(n);
// reader.close();
// n = 0;
// while((n = reader.read()) != -1){
// SystemDemo.out.print((char)n);
// }
/**
* 缓冲数组
*/
// 3
// char[] c = new char[2];
// while((reader.read(c)) != -1){
// String string = new String(c,0,c.length);
// SystemDemo.out.print(string);
// }
// reader.close();
//======================================================================================================
// 如果file不存在,会自动创建
File file1 = new File("c.txt");
// FileWriter writer = new FileWriter(file1);
// FileWriter writer = new FileWriter(file1, true);
// String str = "Hello bluemsun";
// for(int i = 0; i < str.length(); i++){
// writer.write(str.charAt(i));
// }
// writer.close();
//======================================================================================================
FileWriter fileWriter = new FileWriter(file1, true);
// int n = -1;
while((n = reader.read()) != -1){
System.out.print((char)n);
fileWriter.write((char)n);
}
fileWriter.close();
reader.close();
// 缓冲数组
// char[] c = new char[3];
// while((n = reader.read(c)) != -1){
// fileWriter.write(c,0,n);
// }
// fileWriter.close();
// reader.close();
}
}
//不知道为什么会吃掉开头的字符
效果图
总结
以上就是对JAVA IO 流的基本认识
关注博主 持续更新(^-^)V