目录
一、Stream流
简介
分类
二、File类
概述
常用方法
代码详解
三、字节流
概述
文件输出流
文件输入流
字节缓冲流
四、字符流
概述
转换流
字符缓冲流
一、Stream流
简介
学习下面的知识前,我们先来了解下,什么是流?
流的概念:抽象概念,是对数据传输的总称,数据在设备间的传输称为流,流的本质是数据传输。
I/O流就是用来处理设备间传输问题的。
分类
按数据流向划分:输入流和输出流
按数据类型划分:
二、File类
概述
封装一个磁盘路径字符串,对这个路径可以执行操作,可以封装文件路径、文件夹路径、不存在的路径。
常用方法
代码详解
import java.io.File;
import java.io.IOException;
public class Test {
public static void main(String[] args) throws IOException {
// 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例
File file = new File("E:\\根路径\\路径2");
// 从父路径名字符串和子路径名字符串创建新的File实例
File file1 = new File("E:\\根路径","路径2\\test");
// 从父抽象路径名和子路径名字符串创建新的File实例
File file2 = new File(file1,"路径2\\test");
// 当具有该名称的文件不存在时,创建一个由该抽象路径名命名的新空文件
File f = new File("E:\\根路径\\路径2\\test\\hello.txt");
// exists() 测试此抽象路径名表示的File是否为文件
if(!f.exists()){
f.createNewFile();
}
// mkdir() 创建由此抽象路径名命名的目录
// mkdirs() 创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录
File f1 = new File("E:\\根路径\\路径2\\test1");
f1.mkdir();
System.out.println("----------------------------");
// getAbsolutePath() 返回此抽象路径名的绝对路径名字符串
System.out.println(f1.getAbsoluteFile());
System.out.println("----------------------------");
// getPath() 将此抽象路径名转换为路径名字符串
System.out.println(f1.getPath());
System.out.println("----------------------------");
//getName() 返回由此抽象路径名表示的文件或目录的名称
System.out.println(f1.getName());
System.out.println("----------------------------");
// list() 返回此抽象路径名表示的目录中的文件和目录的名称字符串数组
for (String s: file.list()){
System.out.println(s);
}
System.out.println("----------------------------");
// listFiles() 返回此抽象路径名表示的目录中的文件和目录的File对象数组
for (File f0 : file.listFiles()){
System.out.println(f0);
}
System.out.println("----------------------------");
// isFile() 测试此抽象路径名表示的File是否为文件
// isDirectory() 测试此抽象路径名表示的File是否为目录
System.out.println(file1.isDirectory());
System.out.println(file1.isFile());
System.out.println("----------------------------");
}
}
这里留一个思考,如何获取一个文件夹下所有文件的绝对路径(包括子文件夹下的文件)?
提示:递归遍历
代码参考
import java.io.File;
import java.io.IOException;
public class Test {
public static void main(String[] args) throws IOException {
File file = new File("E:\\根路径\\路径1");
getAllFile(file);
}
public static void getAllFile(File file){
File[] files = file.listFiles();
for (File f : files){
if(f.isDirectory()){
getAllFile(f);
}else {
System.out.println(f.getAbsolutePath());
}
}
}
}
运行结果:
三、字节流
概述
????????字节流是由字节组成的,Java里字符由两个字节组成.字节流是基本流,主要用在处理二进制数据。所以字节流是比较常用的,可以可以处理多种不同种类的文件,比如文本文档/音频/视频等等。
文件输出流
OutputStream抽象类,表示所有字节输出流的超类。
常用方法
FileOutputStream子类,直接写入文件数据
FileOutStream(String name)创建文件输出流以指定的名称写入文件。?
FileOutStream(String name,boolean b)追加写入。
代码部分
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class Test {
public static void main(String[] args) throws IOException {
File file = new File("E:\\根路径\\路径1\\资源文件1\\文件1.txt");
FileOutputStream fos = new FileOutputStream(file);
fos.write(48);
byte[] bys = new byte[]{65, 66,67,68,69,70};
fos.write(bys);
fos.write(bys,2,3);
fos.close();
}
}
运行结果:
文件输入流
FileInputStream子类,直接读取文件数据
FileInputStream(String name)创建文件输入流以指定的名称读取文件。?
代码部分
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class Test {
public static void main(String[] args) throws IOException {
File file = new File("E:\\根路径\\路径1\\资源文件1\\文件1.txt");
FileInputStream fis = new FileInputStream(file);
int i;
while ((i=fis.read())!=-1){
System.out.print((char)i + " ");
}
}
}
运行结果:
字节缓冲流
BufferedOutputSream 字节缓冲输出流。
实现缓冲输出流,可以向底层输出流写入数据,而不必为写入的每个字节导致系统的调用。
构造方法
BufferedOutputSream(OutputStream out)
BufferedOutputSream(OutputStream out,int size)
BufferedInputSream 字节缓冲输入流
将创建一个内部缓冲数组,当从流中读取或者跳过字节时,内部缓冲区将根据需要从所包含的输入流中重新填充,一次很多字节
构造方法
BufferedInputSream(InputStream in)
BufferedInputSream(InputStream in,int size)
代码部分
import java.io.*;
public class Test {
public static void main(String[] args) throws IOException {
File file = new File("E:\\根路径\\路径1\\资源文件1\\文件1.txt");
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
bos.write(48);
bos.close();
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
int i;
while ((i=bis.read())!=-1){
System.out.println((char)i);
}
}
}
运行结果:
四、字符流
概述
组成:字节流 + 编码表。
编码表 ?? ?ASCLL ?? ?GBXXX字符集 ?? ?Unicode ?? ?采用任何规则编码,解码时也必须是对应的规则,否则会出现乱码 ?? ??? ?编码 ?? ??? ??? ?byte[] getBytes() 使用平台默认规则编码 ?? ??? ??? ?byte[] getBytes(String charsetName) 使用指定规则编码 ?? ??? ?解码 ?? ??? ??? ?String(byte[] bytes) 使用平台默认规则解码 ?? ??? ??? ?String(byte[] bytes,String charsetName) 使用指定规则解码
转换流
字符流抽象基类 ?? ?Reader ?? ?Writer
转换流 ?? ?InputStreamReader( FileInputStream fis ); ?? ?OutputStreamWriter( FileOutputStream fos );
简化版 ?? ?FileReader ?? ?FileWriter
写数据的方式 (根据参数不同)
读数据的方式 ?? ?read() 一次读一个字符数据 ?? ?read(char[] c) 一次读一个字符数组数据
代码部分
import java.io.*;
public class Test {
public static void main(String[] args) throws IOException {
File file = new File("E:\\根路径\\路径1\\资源文件1\\文件1.txt");
File file1 = new File("E:\\根路径\\路径1\\资源文件1\\文件2.txt");
// 转换流
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(file));
osw.write("我爱Java");
osw.close();
InputStreamReader isr = new InputStreamReader(new FileInputStream(file));
int s ;
while ((s=isr.read())!=-1){
System.out.print((char)s);
}
isr.close();
System.out.println();
// 简化版
FileWriter fw = new FileWriter(file1);
fw.write("我爱Java");
fw.close();
FileReader fr = new FileReader(file1);
int i;
while ((i = fr.read())!=-1){
System.out.print((char)i);
}
}
}
运行结果:
字符缓冲流
BufferedReader?
从文本输入流读取文本,缓冲字符,以提供字符,数组和行的高效读取,可以指定缓冲区大小,或者可以接受默认的大小,默认值足够大,可用于大多数用途.
BufferedWrite
将文本写入字符输出流,缓冲字符,以提供单个字符数组和字符串的高效写入,可以指定缓冲区大小,或者可以接受默认的大小,默认值足够大,可用于大多数用途.
特有功能 ?? ?newLine 写一行行分隔符,行分隔符由系统定义属性 ?? ?readLine() 读一行文字,结果包含行的内容的字符串,不包括任何行终止符,如果流的结尾已经到达,则返回null.
代码部分
import java.io.*;
public class Test {
public static void main(String[] args) throws IOException {
File file = new File("E:\\根路径\\路径1\\资源文件1\\文件1.txt");
BufferedWriter writer = new BufferedWriter(new FileWriter(file));
writer.write("我非常喜欢Java");
writer.newLine();
writer.write("我也非常喜欢Java");
writer.close();
BufferedReader reader = new BufferedReader(new FileReader(file));
String s;
while ((s=reader.readLine())!=null){
System.out.println(s);
}
}
}
运行结果:
?这次的分享就暂时到这里,如有错误的地方请多多指出,谢谢您的阅读。
??????????????????????????????????????????????????????
|