JAVA基础-----IO流基本概念
Posted 敲代码的xiaolang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA基础-----IO流基本概念相关的知识,希望对你有一定的参考价值。
文章目录
前言
其实写io流类的文章有很多,不过近期要考试了,内容是io流,就当整理下来复习一下,也许写的和很多大佬相比相差很多,所以不足之处还请各位师傅不吝赐教。本博文代码主要参考b站:鸟哥JAVA零基础之IO流详解视频【IntelliJ IDEA版-输入输出流】以及自己的一些补充。
一、文件的简单操作
1.文件的创建
书上对于io流的讲解较为生涩,先从文件的处理入手,下面代码演示的是创建一个新的文件,是否成功取决于你电脑此路径下有没有这个文件,如果文件存在那么创建失败,如果不存在则创建成功。
同理,我们对于文件夹,以及文件夹下套文件夹,也就是多级文件夹都可以进行相似的操作,具体操作如代码所示。
package homework;//CSDN-敲代码的xiaolang
import java.io.File;
import java.io.IOException;
public class File_Demo01
public static void main(String[] args)
try
File file1 = new File("E:\\\\test.txt");
boolean flag1 = file1.createNewFile();//创建一个新的文件,如果文件存在那么创建失败,如果不存在则创建成功。
System.out.println(flag1?"文件创建成功":"文件创建失败");
File file2 = new File("E:\\\\java_test");
boolean flag2 = file2.mkdir();//创建一个新的文件夹
System.out.println(flag2?"文件夹创建成功":"文件夹创建失败");
File file3 = new File("E:\\\\java_io\\\\io\\\\test");
boolean flag3 = file3.mkdirs();//创建一个新的多级文件夹
System.out.println(flag3?"多级文件夹创建成功":"多级文件夹创建失败");
catch (IOException e)
e.printStackTrace();
运行结果如图所示,你也可以在你的电脑对应路径下面找到相应的文件。
2.文件的删除
对于删除操作,这里先简单使用delete方法,我们直接让文件去调用即可。
package homework;//CSDN-敲代码的xiaolang
import java.io.File;
public class File_Demo02
public static void main(String[] args)
File file1 = new File("E:\\\\test.txt");
boolean flag = file1.delete();
System.out.println(flag?"文件删除成功":"文件删除失败");
3.文件是否存在
原理也是比较简单的,我们先判断是否存在,使用exists方法。
package homework;//CSDN-敲代码的xiaolang
import java.io.File;
public class File_Demo03
public static void main(String[] args)
File file = new File("E:\\\\test");
boolean flag = file.exists();
if(flag)
System.out.println("文件已经存在");
else
file.mkdir();
4.文件内所包含字节数
我们事先在file文件里面写入xiaolang,然后使用length方法去返回所含字节的大小。
String字符串:length(),返回字符串中字符的个数
数组,数组名.length ,属性,获取数组里面元素的个数
集合, 集合对象名.size(),返回集合中元素的个数
package homework;//CSDN-敲代码的xiaolang
import java.io.File;
import java.io.IOException;
public class File_Demo04
public static void main(String[] args)
File file = new File("E:\\\\xiaolang.txt");
try
file.createNewFile();
Long size = file.length();
System.out.println("size="+size);
catch (IOException e)
e.printStackTrace();
5.文件的名字和路径
package homework;//CSDN-敲代码的xiaolang
import java.io.File;
import java.io.IOException;
public class File_Demo04
public static void main(String[] args)
File file = new File("E:\\\\xiaolang.txt");
try
String fileName = file.getName();
System.out.println("fileName="+fileName);
String path = file.getPath();
System.out.println("path="+path);
catch (Exception e)
e.printStackTrace();
6.使用递归的方法扫描文件夹
思路就是:先判断文件是否是文件夹,是文件夹的话,选择某个文件夹下所有文件,如果不是文件夹,获取此文件夹的路径。
package homework;//CSDN-敲代码的xiaolang
import java.io.File;
public class File_Demo05
public static void showFile(String pathname)
File file = new File(pathname);
boolean flag = file.isDirectory();
if(flag)
File[] files = file.listFiles();
for(int i =0;files!=null&&i<files.length;i++)
boolean flag1 = files[i].isDirectory();
if(flag1)
showFile(files[i].getPath());
else
String filePath = file.getPath();
System.out.println("普通文件---》"+filePath);
else
String filePath = file.getPath();
System.out.println("普通文件---》"+filePath);
public static void main(String[] args)
File_Demo05.showFile("E:\\\\");//扫描E盘
我的E盘基本没有文件,所以比较容易看到所有的结果。
二、输入输出流
首先用一张图带你了解基本模式:
1.FileInputStream
代码部分注释掉的部分和下面引用中代码的意思是一样的,只不过更加简洁。
FileInputStream fileInputStream = new FileInputStream(“E:\\xiaolang.txt”);
package homework;//CSDN-敲代码的xiaolang
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
public class File_Demo06
public static void main(String[] args)
try
/*File file = new File("E:\\\\xiaolang.txt");
if(file.exists()&&file.length()>0)
FileInputStream fileInputStream = new FileInputStream(file);
*/
FileInputStream fileInputStream = new FileInputStream("E:\\\\xiaolang.txt");
int ch = 0;
while((ch=fileInputStream.read())!=-1)
System.out.println((char)ch);//控制换行
fileInputStream.close();
catch (Exception e)
System.out.println("文件找不到");
2.FileOutputStream
下面的栗子是我在E盘创建了一个文件,然后把它拷贝到我们的D盘去,这里注意使用file去调用read方法,而使用file1去调用write方法,然后我们统计一下所需要耗费的时间。
package homework;//CSDN-敲代码的xiaolang
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
public class File_Demo08
public static void main(String[] args)
try
long startTime = System.currentTimeMillis();
FileInputStream file = new FileInputStream("E:\\\\xiaolang.txt");
FileOutputStream file1 = new FileOutputStream("D:\\\\xiaolang.txt");
int ch = 0;
while ((ch = file.read()) != -1)
file1.write(ch);
file.close();
file1.close();
long endTime = System.currentTimeMillis();
System.out.println("共消耗"+(endTime-startTime)+"ms");
catch (Exception e)
System.out.println("文件找不到");
3.BufferedInputStream
我们对上面的栗子进行一些改动,我们使用BufferedInputStream去更快的读取文件,BufferedInputStream继承于FilterInputStream,本质上是通过一个内部缓冲区数组实现的,用read读取输入流的数据时,BufferedInputStream会将该输入流的数据分批次的导入缓冲区。当缓冲区中的数据被读完后,输入流会再次填充缓冲区中的数据;如此循环往复下去,直到读完输入流数据结束。
package homework;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
public class File_Demo09
public static void main(String[] args)
InputStream inputStream = null;
try
inputStream = new FileInputStream("E:\\\\xiaolang.txt");
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
catch (FileNotFoundException e)
e.printStackTrace();
获取时间差和所含字节数:
package homework;//CSDN-敲代码的xiaolang
import jdk.swing.interop.SwingInterOpUtils;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
public class File_Demo09
public static void main(String[] args)
InputStream inputStream = null;
try
long startTime = System.currentTimeMillis();
inputStream = new FileInputStream("E:\\\\xiaolang.txt");
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
byte[] temp = new byte[1024];
int len = 0;
while((len = bufferedInputStream.read(temp))!=-1)
System.out.println(len);
long endTime = System.currentTimeMillis();
System.out.println("共消耗"+(endTime-startTime)+"ms");
catch (Exception e)
e.printStackTrace();
4.FileReader读取文件所含字节数
package homework;//CSDN-敲代码的xiaolang
import java.io.FileNotFoundException;
import java.io.FileReader;
public class File_Demo10
public static void main(String[] args)
try
FileReader fileReader = new FileReader("E:\\\\xiaolang.txt");
char[] temp = new char[1024];
int len = 0;
while((len=fileReader.read(temp))!=-1)
System.out.println(len);
fileReader.close();
catch (Exception e)
e.printStackTrace();
5.FileReader获取文本内容
package homework;//CSDN-敲代码的xiaolang
import java.io.FileNotFoundException;
import java.io.FileReader;
public class File_Demo10
public static void main(String[] args)
try
FileReader fileReader = new FileReader("E:\\\\xiaolang.txt");
char[] temp = new char[1024];
int len = 0;
while((len=fileReader.read(temp))!=-1)
String s = new String(temp,0,len);
System.out.println(s);
fileReader.close();
catch (Exception e)
e.printStackTrace();
6.FileWriter修改文本内容
这个栗子是直接写入:“玛卡巴卡balabala”
package homework;//CSDN-敲代码的xiaolang
import java.io.FileWriter;
import java.io.IOException;
public class File_Demo11
public static void main(String[] args)
try
String s = "玛卡巴卡balabala";
FileWriter fileWriter = new FileWriter("E:\\\\makabaka.txt");
fileWriter.从设计模式角度理解Java IO基本概念