I/O流
一、什么是I/O流
I :Input
O:Output
通过I/O可以完成硬盘文件的读和写
二、I/O流的分类
1、按照流的方向进行分类:
以内存作为参照物: 。往内存中去: 叫做输入(lnput)。或者叫做读(Read)。 。从内存中出来: 叫做输出(Output)。或者叫做写(Write)。
2、按照 读取数据方式 不同进行分类: (1)按照 字节 的方式读取数据,一次读取1个字节byte,等同于一次读取8个二进制位,文本文件,图片,声音文件,视频文件 等... 这种流是万能的,什么类型的文件都可以读取。包括:文本文件,图片,声音文件,视频文件 等...
例如: 假设文件file1.txt,采用字节流的话是这样读的! a中国bc张fe 第一次读: 一个字节,正好读到'a' 第二次读:一个字节,正好读到中”字符的一半。 第三次读:一个字节,正好读到中”字符的另外一半
(2)按照 字符 的方式读取数据的,一次读取一个字符 这种流是为了方便读取 普通文本文件 而存在的,这种流不能读取: 图片、声音、视频等文件。只能读取 纯文本文件,连word文件都无法读取。 注意: 纯文本文件,不单单是txt文件,还包括 .java、.ini、.py 。总之只要 能用记事本打开 的文件都是普通文本文件。
例如: 假设文件file1.txt,采用字符流的话是这样读的: a中国bc张=fe 第一次读:a字符 (a字符在windows系统中占用1个字节。) 第二次读:中字符(中字符在windows系统中占用2个字节。)
3、按照流的处理方式分类:
(1)直接处理流:
(2)间接处理流:
综上所述:流的分类:
输入流、输出流
字节流、字符流
直接处理流、间接处理流
三、File类的常用方法:
-
boolean exists() 判断文件或目录是否存在
-
boolean isFile() 判断是否是文件
-
boolean isDirectory() 判断是否是目录
-
String getPath() 返回此对象表示的文件的相对路径名
-
String getAbsolutePath() 返回此对象表示的文件的绝对路径名
-
String getName() 返回此对象表示的文件或目录的名称
-
boolean delete() 删除此对象指定的文件或目录
-
boolean createNewFile() 创建名称的空文件,不创建文件夹
-
long length() 返回文件的长度,单位为字节,如果文件不存在,则返回0
public class FileTest01 {
public static void main(String[] args) {
File f=new File("D:/123.txt");
System.out.println("文件绝对路径"+f.getAbsolutePath());//D:\123.txt
System.out.println("文件是否存在"+f.exists());//true
System.out.println("是否是文件"+f.isFile());//true
System.out.println("是否是目录"+f.isDirectory());//false
System.out.println("文件相对路径"+f.getPath());//D:\123.txt
System.out.println("文件名"+f.getName());//123.txt
try {
if (f.createNewFile()){
System.out.println("创建成功");
}else{
System.out.println("文件已存在");
}
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("文件长度"+f.length());//45
}
}
文件输出流
/**输出流,字节流,直接处理流
* @author Lx 写出
* @create 2024-03-05 21:19
*/
public class FileOutputTest02 {
public static void main(String[] args) throws IOException {
File f=new File("D:/456.txt");
//输出流,true表示在f的基础上追加内容
OutputStream os=new FileOutputStream(f,true);
//也可以写成以下形式,效果一样
//OutputStream os=new FileOutputStream("D:/456.txt",true);//直接对文件处理
for (int i = 1; i < 1000; i++) {
//在文件中写入
os.write(i);
}
os.flush();//强制把半路的数据压入文件
os.close();//关闭流
}
}
文件输入流
/**输入流,字节流,直接处理流
* @author Lx
* @create 2024-03-06 14:53
*/
public class FileInputTest03 {
public static void main(String[] args) throws IOException {
File f=new File("D:/456.txt");
//定义一个输入流接到文件中
InputStream is=new FileInputStream(f);
//定义一个小桶用来装数据
byte [] b=new byte[1024];
//用read()方法把数据装入到小桶中,并计算出一桶里装多少个数据
int length=0;
//System.out.println(length);
//大于0则表示有数据
while((length=is.read(b))>0){
//把一桶数据存到str中
String str=new String(b,0,length);
System.out.println(str);
//再读下一桶数据
//length=is.read(b);
System.out.println(length);
}
is.close();
}
}
写出
/**输出流,字符流,直接处理流
* @author Lx
* @create 2024-03-06 15:43
*/
public class FileWriterTest0401 {
public static void main(String[] args) throws IOException {
Writer w = new FileWriter("D:/456.txt",true);
/*for (int i = 1; i < 1000; i++) {
w.write(i);
}*/
char [] c="把这一段字符串放在数组中".toCharArray();
for (int i = 0; i < c.length; i++) {
w.write(c[i]);
}
w.flush();
w.close();
}
}
读入
/**输入流,字节流,直接处理流
* @author Lx
* @create 2024-03-06 20:33
*/
public class FileReaderTest05 {
public static void main(String[] args) throws IOException {
//定义一个输入流
Reader r=new FileReader("D:/456.txt");
//定义一只小桶
char[] c=new char[1024];
int length=r.read(c);
while(length>0){
String str=new String(c,0,length);
System.out.println(str);
length=r.read(c);
}
r.close();
}
}
11万+

被折叠的 条评论
为什么被折叠?



