Java输入输出流的学习
1.流的定义
流是一连串流动的字符以先进先出的方式传输的通道。
Java中的流既可以是未经加工的原始二进制数据,也可以是经过一定编码处理后符合某种特定格式的数据。
其中按照数据的传输方向分为输入流与输出流,按照数据类型还可以分为字节流和字符流,统称为IO流。
2.IO流的应用
io流应用最广泛的应该就是上传文件、下载文件和传输数据。
3.File文件类
java.io.File 类是文件和目录路径名的抽象表示,是专门用于文件操作的类,但是不能对文件内容进行操作,主要用于文件和目录的创建、查找和删除等操作。
3.1 创建文件和文件夹
创建文件主要通过如下方式进行创建:通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例,参数是(String pathname);从父路径名字符串和子路径名字符串创建新的 File实例,参数是(String parent, String child);从父抽象路径名和子路径名字符串创建新的 File实例,参数是(File parent, String child) 。
String path = "D:\\testFile\\file123.txt";
File file = new File(path);
if(!file.getParentFile().exists()){
file.getParentFile().mkdirs();
}
if(!file.exists()){
file.createNewFile();
}
注意:直接实例化File是创建不出来文件夹或者文件的,创建文件夹需要mkdir()或者mkdirs()方法,创建文件则需要createNewFile()方法,一般创建文件时需要先判断下父级文件夹目录是否存在,只有有父级文件夹目录才能创建里面的文件否则会抛异常。
其中mkdir()方法为创建一级目录,mkdirs()方法是创建多级目录,就是不管几层一次创建。
3.1 删除文件和文件夹
删除文件和删除文件夹都是对指定File对象调用delete()方法,因此要将文件夹和文件都删除的话,需要进行判断,因为文件夹里有文件是删除不了文件夹的,必须将文件夹中的文件清空才能将文件夹删除。
public void deleteFile(File file){
if(file.exists()){
if(file.isFile()){
file.delete();
}else{
File[] fileList = file.listFiles();
for(File f : fileList){
deleteFile(f);
}
}
file.delete();
}else{
System.out.println("file路径不存在!");
}
}
4.输入输出字节流
字节流是以字节为单位,读写数据的流,按照数据传输的方向分为:输入字节流InputStream和输出字节流OutputStream。
4.1 输入字节流InputStream
一切文件数据,包括文本、图片、视频等等在读取的过程中都是以二进制的形式读取,因为保存任何数据的底层都是以字节进行读取的。
InputStream 抽象类是所有的输入字节流的父类。继承InputStream抽象类的ByteArrayInputStream实现类、StringBufferInputStream实现类、FileInputStream实现类分别对应处理Byte数组、StringBuffer缓存流和本地文件的数据读取操作。
常用的方法有:
abstract int read()方法是从输入流中读取数据的下一个字节;
int read(byte[] b)方法是从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b中;
int read(byte[] b, int off, int len)方法将输入流中最多 len 个数据字节读入 byte 数组;
long skip(long n) 跳过和丢弃此输入流中数据的 n个字节;
void close()关闭此输入流并释放与该流关联的所有系统资源。
public void InputTest() throws IOException {
FileInputStream f = new FileInputStream("D:\\testFile\\test123.txt");
int len = 0;
while ((len = f.read()) != -1){
System.out.print((char)len +" ");
}
f.close();
}
4.2 输出字节流InputStream
一切文件数据,包括文本、图片、视频等等在存储的过程中都是以二进制的形式保存,因为保存任何数据的底层都是以字节进行存储的。
public void outputTest() throws IOException {
FileOutputStream f = new FileOutputStream("D:\\testFile\\test123.txt");
Byte[] bytes = {99,115,49,50,51 };
for (Byte b : bytes){
f.write(b);
}
f.close();
}
5.输入输出字符流
5.1 输入字符流Reader
FileReader f = new FileReader("a.txt");
int len;
while ((len = f.read())!=-1) {
System.out.println((char)len);
}
f.close();
5.2 输出字符流Writer
FileReader r = new FileReader("testFile.txt");
FileWriter w = new FileWriter("testFile2.txt");
int len;
while((len = r.read())! = -1){
w.write(len);
}
- 点赞
- 收藏
- 关注作者
评论(0)