JAVA IO流
IO流的分类:输入流,输出流,字符流,字节流
输入输出是相对内存而言的,硬盘到内存称为输入流,内存到硬盘成为输出流。
字符流:按字符进行读取,只能操作普通文件(超文本文件txt),以Reader,Wirter结尾的io类都是字符流
字节流:按字节8个比特位读取,操作所有文件,以Stream结尾的io类都是字节流
使用注意:异常的处理,流的关闭close(),输出流每次输出时完成刷新管道flush()
1.FileInputStream 字节输入流读取文件(常用版)
1.1 常用IPA
FileInputStream(File file): 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的 File对象 file命名。
FileInputStream(String name): 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的路径名 name命名。
当你创建一个流对象时,必须传入一个文件路径。该路径下,如果没有该文件,会抛出FileNotFoundException 。
public void close() :关闭此输入流并释放与此流相关联的任何系统资源。
public abstract int read(): 从输入流读取数据的下一个字节。
public int read(byte[] b): 从输入流中读取一些字节数,并将它们存储到字节数组 b中 。
1 public static void test01() throws Exception { 2 FileInputStream fis = null; 3 fis = new FileInputStream("OutTest.txt"); 4 byte[] readResult = new byte[10];//接收每次读取数据 5 int readCount = 0;//每次读取数据位数 6 //read()方法读取数据,返回读取的byte位数,-1表示已经读完 7 while ((readCount = fis.read(readResult)) != -1) { 8 System.out.println(new String(readResult, 0, readCount)); 9 } 10 if (fis != null) { 11 fis.close(); 12 } 13 }
2.FileOutoutStream字节输出流输出文件
2.1构造方法
public FileOutputStream(File file, boolean append): 创建文件输出流以写入由指定的 File对象表示的文件。
public FileOutputStream(String name, boolean append): 创建文件输出流以指定的名称写入文件。
2.2常用方法
public void close() :关闭此输出流并释放与此流相关联的任何系统资源。
public void flush() :刷新此输出流并强制任何缓冲的输出字节被写出。
public void write(byte[] b):将 b.length字节从指定的字节数组写入此输出流。
public void write(byte[] b, int off, int len) :从指定的字节数组写入 len字节,从偏移量 off开始输出到此输出流。
public static void test03() throws Exception { FileOutputStream fts = new FileOutputStream("OutTest.txt", true);//true表示追加,不然每次会先清空源文件 String res = "我是一个中国人"; byte[] bytes = res.getBytes(); fts.write(bytes); fts.flush(); fts.close(); }
3.利用BufferedReader带缓冲区字符输入流读取文件
public static void test04() throws Exception { // FileInputStream fis = new FileInputStream("OutTest.txt"); // InputStreamReader isr=new InputStreamReader(fis); //InputStreamReader流的转化 // BufferedReader br = new BufferedReader(isr); //处理流 FileReader fr = new FileReader("OutTest.txt"); //节点流 BufferedReader br = new BufferedReader(fr); //处理流传入Reader类型的节点流 String readContent = null; while ((readContent = br.readLine()) != null) System.out.println(readContent); br.close(); }
4.File类用IPA
4.1构造方法
public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的 File实例。
public File(File parent, String child) :从父抽象路径名和子路径名字符串创建新的 File实例
4.2常用方法
public String getAbsolutePath() :返回此File的绝对路径名字符串。
public String getPath() :将此File转换为路径名字符串。
public String getName() :返回由此File表示的文件或目录的名称。
public long length() :返回由此File表示的文件的长度。
public boolean exists() :此File表示的文件或目录是否实际存在。
public boolean isDirectory() :此File表示的是否为目录。
public boolean isFile() :此File表示的是否为文件。
public boolean createNewFile() :当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。
public boolean delete() :删除由此File表示的文件或目录。
public boolean mkdir() :创建由此File表示的目录。
public boolean mkdirs() :创建由此File表示的目录,包括任何必需但不存在的父目录。
public String[] list() :返回一个String数组,表示该File目录中的所有子文件或目录。
public File[] listFiles() :返回一个File数组,表示该File目录中的所有的子文件或目录。
5.拷贝整个文件目录
/** * @param file 原目录 * @param path 目的路径 * @throws Exception */ public static void test05(File file, String path) throws Exception { File outFile = new File(path);//目的目录是否存在,不存在就创建 if (!outFile.exists()) { outFile.mkdir(); } for (File fs : file.listFiles()) {//原目录下的所有文件以及目录。 if (fs.isFile()) {//判断是否为文件 FileInputStream fis = new FileInputStream(fs); FileOutputStream fos = new FileOutputStream(path + "//" + fs.getName(), true); byte[] readBytes = new byte[1024]; int readCount = 0; while ((readCount = fis.read(readBytes)) != -1) {//进行源文件的读取 fos.write(readBytes, 0, readCount);//写入到目的文件 fos.flush(); } fis.close(); fos.close(); } else {//不是文件就是目录,目录进行递归 test05(fs, path + "//" + fs.getName()); } }