字符流
Reader
字符输入流
public int read(char[]c)//从流中读取多个字符,将读到内容存入c数组,返回实际读到的字符数;如果达到文件的尾部,则返回-1。
import javax.swing.text.StringContent; public static void main(String[] args) throws Exception{ //1创建FileReader 文件字符输入流 FileReader fr = new FileReader("d://hello.txt"); //2读取 //2.1单个字符读取 // int data = 0; // while ((data = fr.read())!=-1){ // System.out.print((char)data); // } char[] buf = new char[1024]; int count =0; while ((count = fr.read(buf))!=-1){ System.out.println(new String(buf,0,count)); } //关闭 fr.close(); }
Wirter
字符输出流
public void write(String str)//一次写多个字符,将b数组中所有字符,写入输出流。
import java.io.FileWriter; public static void main(String[] args)throws Exception { FileWriter fw = new FileWriter("d://write.txt"); for(int i=0;i<10;i++){ fw.write("java666"); fw.flush(); } fw.close(); }
PrintWriter
封装了print()/println()方法,支持写入后换行。
支持数据原样打印
import java.io.PrintWriter; public static void main(String[] args) throws Exception { //1创建打印流 PrintWriter pw = new PrintWriter("d:\\print.txt"); //2打印 pw.println(97); pw.println(true); pw.println(3.14); pw.println('a'); //3关闭 pw.close(); System.out.println("执行完毕"); }
文件的复制
使用FileReader和Filewriter复制文本文件,不能复制图片或二进制文件
import java.io.FileReader; import java.io.FileWriter; public static void main(String[] args) throws Exception{ //1创建FileReader FileWriter FileReader fr=new FileReader("d:\\write.txt"); FileWriter fw=new FileWriter("d:\\write2.txt"); //2读写 int data=0; while((data=fr.read())!=-1) { fw.write(data); fw.flush(); } //3关闭 fr.close(); fw.close(); System.out.println("复制完毕"); }
字符缓冲流
缓冲流:BufferedReader/BufferedWriter
-
高效读写
-
支持输入换行符
-
可一次写一行、读一行
输出文件
import java.io.BufferedReader; import java.io.FileReader; public static void main(String[] args) throws Exception{ //1创建缓冲流 FileReader fr=new FileReader("d:\\write.txt"); BufferedReader br=new BufferedReader(fr); //2读取 //2.1第一种方式 char[] buf=new char[1024]; int count=0; while((count=br.read(buf))!=-1) { System.out.print(new String(buf,0,count)); } //2.2第二种方式,一行一行的读取 String line=null; while((line=br.readLine())!=null) { System.out.println(line); } //3关闭 br.close(); }
写入文件
import java.io.BufferedWriter; import java.io.FileWriter; public static void main(String[] args) throws Exception{ //1创建BufferedWriter对象 FileWriter fw=new FileWriter("d:\\buffer.txt"); BufferedWriter bw=new BufferedWriter(fw); //2写入 for(int i=0;i<10;i++) { bw.write("好好学习,天天向上"); bw.newLine();//写入一个换行符windows \r\n linux \n bw.flush(); } //3关闭 bw.close(); System.out.println("执行完毕"); }
转换流
桥转换流:InputStreamReader/0utputStreamWriter
内存中的字符和硬盘中的字节之间的转换
InputStreamReader
字节流转成字符流
可将字节流转换为字符流。 可设置字符的编码方式。
import java.io.FileInputStream; import java.io.InputStreamReader; public static void main(String[] args) throws Exception { //1创建InputStreamReader对象 FileInputStream fis = new FileInputStream("d:\\write.txt"); InputStreamReader isr = new InputStreamReader(fis, "utf-8"); //2读取文件 int data = 0; while ((data = isr.read()) != -1) { System.out.print((char) data); } //3关闭 isr.close(); }
0utputStreamWriter
字符流转成字节流
import java.io.FileOutputStream; import java.io.OutputStreamWriter; public static void main(String[] args) throws Exception{ //1创建OutputStreamWriter FileOutputStream fos=new FileOutputStream("d:\\info.txt"); OutputStreamWriter osw=new OutputStreamWriter(fos, "utf-8"); //2写入 for(int i=0;i<10;i++) { osw.write("我爱北京,我爱故乡\r\n"); osw.flush(); } //3关闭 osw.close(); System.out.println("执行成功"); }
File类
概念:代表物理盘符中的一个文件或者文件夹。
文件操作和文件夹操作
public static void main(String[] args) throws Exception { //fileOperator(); fileOpe(); separator(); directoryOpe(); } //(1)分隔符 public static void separator() { System.out.println("路径分隔符" + File.pathSeparator); System.out.println("名称分隔符" + File.separator); } //(2)文件操作 public static void fileOpe() throws Exception { //1创建文件 File file = new File("d:\\file.txt"); //System.out.println(file.toString()); boolean b = file.createNewFile(); //2删除文件 //2.1直接删除 //System.out.println("删除结果:"+file.delete()); //2.2使用jvm退出时删除 // file.deleteOnExit(); // Thread.sleep(5000);//休眠五秒(五秒后删除) System.out.println("------------------------------------------------------------------------------"); //3获取文件信息 System.out.println("获取文件的绝对路径:" + file.getAbsolutePath()); System.out.println("获取路径:" + file.getPath()); System.out.println("获取文件名称:" + file.getName()); System.out.println("获取父目录:" + file.getParent()); System.out.println("获取文件长度:" + file.length()); System.out.println("文件创建时间:" + new Date(file.lastModified()).toLocaleString()); //4判断 System.out.println("是否可写:" + file.canWrite()); System.out.println("是否时文件:" + file.isFile()); System.out.println("zheli"); System.out.println("是否隐藏:" + file.isHidden()); } //(3)文件夹操作 public static void directoryOpe() throws Exception { System.out.println("---------------------*************-----------------------"); //1创建文件夹 File dir = new File("d:\\aaa\\bbb\\ccc"); System.out.println(dir.toString()); if (!dir.exists()) { dir.mkdir();//只能创建单级目录 System.out.println("创建结果:" + dir.mkdirs());//创建多级目录 } //2删除文件夹 //2.1直接删除(注意删除空目录) //System.out.println("删除结果:"+dir.delete()); //2.2使用jvm删除 // dir.deleteOnExit(); // Thread.sleep(5000); //3获取文件夹信息 System.out.println("获取绝对路径:" + dir.getAbsolutePath()); System.out.println("获取路径:" + dir.getPath()); System.out.println("获取文件夹名称:" + dir.getName()); System.out.println("获取父目录:" + dir.getParent()); System.out.println("获取创建时间:" + new Date(dir.lastModified()).toLocaleString()); //4判断 System.out.println("是否时文件夹:" + dir.isDirectory()); System.out.println("是否时隐藏:" + dir.isHidden()); //5遍历文件夹 File dir2 = new File("d:\\123123"); String[] files = dir2.list(); System.out.println("-------------------"); for (String string : files) { System.out.println(string); } }
FileFilter接口
public interface FileFilterboolean accept (File pathname)
当调用File类中的listFiles()方法时,支持传入FileFilter接口接口实现类,对获取文件进行过滤,只有满足条件的文件的才可出现在listFiles()的返回值中。
System.out.println("----------FileFilter接口的使用----------"); File[] files2 = dir2.listFiles(new FileFilter() { @Override public boolean accept(File pathname) { if (pathname.getName().endsWith(".jpg")) { return true; } return false; } }); for (File file : files2) { System.out.println(file.getName()); }
递归遍历和递归删除
import java.io.File; public static void main(String[] args) { //Listdir(new File("d://123123")); deleteDir(new File("d://123123")); } //递归遍历文件夹 public static void Listdir(File dir){ File[] files =dir.listFiles(); System.out.println(dir.getAbsolutePath()); if(files!=null&& files.length>0){ for (File file : files) { if(file.isDirectory()){//于判断当前 File 对象是否表示一个目录(文件夹) Listdir(file);//递归Listdir 的核心功能是 递归遍历目录 }else { System.out.println(file.getAbsolutePath()); } } } } //递归删除文件夹 public static void deleteDir(File dir){ File[] files = dir.listFiles(); if(files!=null&& files.length>0){ for (File file : files) { if(file.isDirectory()){//于判断当前 File 对象是否表示一个目录(文件夹) deleteDir((file));//递归Listdir 的核心功能是 递归遍历目录 }else { System.out.println(file.getAbsolutePath()+"删除"+file.delete()); } } } System.out.println(dir.getAbsolutePath()+"删除"+dir.delete()); }