Java文件(File)、流(Stream)和IO
程序员文章站
2024-03-04 21:57:48
...
Java文件(File)、流(Stream)和IO
Java的IO包中提供了所有操作输入、输出的类。所有这些类表示了输入源和输出目标。
一个流可以理解为一个数据的序列。输入流表示从一个源读取数据,输出流表示向一个目标写数据。
一、文件操作
在Java中专门提供了针对于文件操作的类——File,位于Java.io包下
下面是常用文件操作:
-
File类的创建方法
//第一种 File file = new File("F:/javaFileTest/test.txt"); //传入文件路径 //第二种 File file = new File("F:/javaFileTest,test.txt"); //文件夹+文件
-
文件创建
//方法一 File file = new File("F:/javaFileTest/test.txt"); file.createNewFile(); //方法二 File file = new File("F:/javaFileTest,test.txt"); file.createNewFile();
-
文件夹创建
//前提:javaFileTest已存在 //方法一 File dir = new File("F:/javaFileTest/文件夹1"); dir.mkdir(); //返回布尔结果,该方法只创建一个文件夹 //方法一 File dir = new File("F:/javaFileTest/文件夹1/文件夹2/文件夹3"); dir.mkdirs(); //返回布尔结果,创建一个文件夹和它的所有父文件夹
-
文件移动
File file1 = new File("F:/javaFileTest/test.txt/c.txt") //原文件 File file = new File("F:/javaFileTest/test.txt"); //目标文件 file1.renameTo(destFile);
-
读取目录
import java.io.File; public class Demo2 { public static void main(String[] args) { File dir = new File("F:/Demo"); //申明要遍历的文件对象 File[] files = dir.listFiles(); //将该文件下第一层目录下的所有文件存到文件数组中 listFile(files); } /** *递归遍历文件夹 */ private static void listFile(File[] files){ if(files != null && files.length>0){ //文件非空且大小大于0 for (File file:files) { //for-each遍历每个文件 if(file.isFile()){ //如果是文件就打印 if(file.getName().endsWith(".java")) System.out.println("找到目标文件:" + file.getAbsolutePath()); } else{ //如果是文件夹则继续遍历递归 listFile(file.listFiles()); //递归 } } } } }
二、流(Stream)和IO(input、output)
如前所述,一个流被定义为一个数据序列。对于java程序,输入流用来读取数据,输出流用来写数据。
以下是输入流与输出流的类层次图
下面演示FileInputStream与FileOutputStream:
-
FileInputStream
-
类的创建
//方法一 FileInputStream fis = new FileInputStream("F:/javaFileTest/test.txt"); //传入文件路径 //方法二 File file = new File("F:/javaFileTest/test.txt"); FileInputStream fis = new FileInputStream(file); //传入File对象
-
常用方法
//读 /*这个方法从 InputStream 对象读取指定字节的数据。返回为整数值。返回下一字节数据,如果已经到结尾则返回-1。*/ public int read(int r)throws IOException{} //这个方法从输入流读取r.length长度的字节。返回读取的字节数。如果是文件结尾则返回-1。 public int read(byte[] r) throws IOException{} //关闭流 //关闭此文件输入流并释放与此流有关的所有系统资源。抛出IOException异常。 public void close() throws IOException{}
-
-
FileOutputStream
-
类的创建
//方法一 FileOutputStream fos = new FileOutputStream("F:/javaFileTest/test.txt"); //传入文件路径 //方法二 File file = new File("F:/javaFileTest/test.txt"); FileOutputStream fis = new FileOutputStream(file); //传入File对象
-
常用方法
//写 public void write(int w)throws IOException{} //把指定字符写到输入流中 public void write(byte[] w) //把数组中w.length长度的字节写到OutputStream中 //关闭流 public void close() throws IOException{} //关闭文件输入流并释放与此流有关的资源
-
-
Reader与Writer
由于FileInputStream和FileOutputStream是对二进制数和字符的读写,使用的时候不是很方便,一般都会在外层套用一个包装类
-
代码示例
//Reader的子类BufferedReader的对象创建 BufferedReader bf = new BufferedReader(new InputStreamReader(new FileInputStream("F:/javaFileTest/test.txt"))); //Writer的子类BufferedWriter的对象的创建 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("F:/javaFileTest/test.txt")));
-
分析
- BufferedWriter:使用默认缓冲区大小从字符文件中读取文本。
- InputStreamReader:是从字节流到字符流的桥接器:它使用指定的charset读取字节并将其解码为字符。
- FileInputStream:用于读取诸如图像数据的原始字节流。
-
-