java----文件操作
File基本使用
import java.io.File; import java.io.FileFilter; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; public class Demo { public static void main(String[] args) { //三种写法 //"C:/Users/zhengyan/Desktop/test" //"C:\\Users\\zhengyan\\Desktop\\test" //"C:"+File.separator+"Users"+File.separator+"zhengyan"+File.separator+"Desktop"+File.separator+"test" File f1 = new File("C:\\Users\\zhengyan\\Desktop\\test"); File f2 = new File("C:\\Users\\zhengyan\\Desktop\\test\\t.js"); System.out.println(f1.isDirectory());//判断该目录是否是一个文件夹 System.out.println(f2.isFile()); //判断该目录是否是一个文件 File f3 = new File("C:\\Users\\zhengyan\\Desktop\\test11"); if(!f3.exists()){ //判断指定的目录是否存在(包括文件和目录) try { f3.createNewFile(); //创建文件 f3.mkdir(); //创建目录 } catch (IOException e) { e.printStackTrace(); } }else{ String[] name = f3.list(); //列出文件夹下的所有的文件(第一层) File[] name1 = f3.listFiles(); //列出当前目录下的所有的文件; File[] name2 = f3.listFiles(new FileFilter() { @Override public boolean accept(File pathname) { return pathname.getName().endsWith(".txt"); } }); //列出当前目录下的所有的(.txt)文件; for(File i:name1){ System.out.println(i.getName()); //获取文件名 Date date = new Date(i.lastModified()); SimpleDateFormat simpledateformat = new SimpleDateFormat("HH:mm:ss"); System.out.println(simpledateformat.format(date));//文件的最后修改时间 } f3.delete(); //删除一个文件夹,只能是空文件夹,才可以删除 } File f4 = new File("C:\\Users\\zhengyan\\Desktop\\test"); f4.renameTo(new File("C:\\Users\\zhengyan\\Desktop\\new_test")); //重命名 f4.renameTo(new File("C:\\Users\\zhengyan\\new_test")); //移动文件 } }
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
示例:递归所有某个目录下的指定扩展名的文件
import java.io.File; public class Demo { public static void main(String[] args) { showfile("C:\\Users\\zhengyan\\Desktop\\test1","txt"); } public static void showfile(String filepath,String ext){ File f = new File(filepath); if(!f.exists()){ return; } else{ File[] file_list = f.listFiles(); for(File i:file_list){ if(i.isDirectory()){ showfile(i.getAbsolutePath(),ext); }else{ if(i.getName().endsWith(ext)){ System.out.println(i.getName()); } } } } } }
文件的读取和写入(字节流)
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class Demo { public static void main(String[] args) { //文件写入 output("C:\\Users\\zhengyan\\Desktop\\test1\\x.txt","你好\r\n"); //文件读出 input("C:\\Users\\zhengyan\\Desktop\\test1\\x.txt"); } //对程序来说,将程序中的数据往文件写入,叫输出流 public static void output(String filepath,String s){ File file = new File(filepath); try { //如果只能的目录中的文件不存在,会自动创建,如果目录不存在就会报错 // OutputStream out = new FileOutputStream(file);//需要捕获异常 OutputStream out = new FileOutputStream(file,true);//追加写入 out.write(s.getBytes());//需要捕获异常 out.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public static void input(String filepath){ byte[] bytes = new byte[1024]; StringBuilder strbuilder = new StringBuilder(); File file = new File(filepath); try { InputStream in = new FileInputStream(file); int len = -1; while((len=in.read(bytes))!=-1){ //从输入流读取一些字节数,并将它们存储到 //缓冲区 bytes中,并且返回读取的字节的大小,当返回值为-1,表明数据读取完毕 System.out.println(len); strbuilder.append(new String(bytes,0,len));//从数组的起始位置,到len长度位置,截取,转成字符串,(否则会出现多出字符的情况) } in.close(); System.out.println(strbuilder); }catch (FileNotFoundException e) { e.printStackTrace(); }catch (IOException e) { e.printStackTrace(); } } }
文件的读取和写入(字符流)
package com.zy; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.Reader; import java.io.Writer; public class Demo { public static void main(String[] args) { // write(); read(); } public static void write(){ String pathfile = "C:/Users/zhengyan/Desktop/test1/x.txt"; File file = new File(pathfile); try { Writer out = new FileWriter(file); out.write("你好,小明"); out.close(); } catch (IOException e) { e.printStackTrace(); } } private static void read() { String pathfile = "C:/Users/zhengyan/Desktop/test1/x.txt"; File file = new File(pathfile); try { Reader read = new FileReader(file); char cr[] = new char[10]; StringBuilder strbuilder = new StringBuilder(); int len = -1; while((len=read.read(cr))!=-1){ strbuilder.append(cr,0,len); } read.close(); System.out.println(strbuilder); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
字节操作流:每次执行写入会直接将数据写入文件;
字符操作流:执行完写入后,先将数据放入缓存区(1024字节),1.如果缓存区满了,会将数据吸入文件中,2.如果没有满,认为flush.将数据写入文件。3.执行close。会自动将数据写入文件。(字符流是基于字节流的)
示例:文件的复制
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class Demo { public static void main(String[] args) { copy("C:\\Users\\zhengyan\\Desktop\\test1\\x.txt","C:\\Users\\zhengyan\\Desktop\\test1\\1\\x.txt"); } public static void copy(String old_path,String new_path){ File old_file = new File(old_path); File new_file = new File(new_path); InputStream file_read = null; OutputStream file_write = null; try { file_read = new FileInputStream(old_file); file_write = new FileOutputStream(new_file); byte bytes[] = new byte[1024]; int len = -1; while((len=file_read.read(bytes))!=-1){ file_write.write(bytes,0,len); } } catch (Exception e) { e.printStackTrace(); }finally{ try { file_read.close(); file_write.close(); } catch (IOException e) { e.printStackTrace(); } } } }
字符流和字节流的转换
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.Reader; import java.io.Writer; import java.nio.charset.Charset; public class Demo { public static void main(String[] args) throws IOException { File file = new File("C:\\Users\\zhengyan\\Desktop\\test1\\x.txt"); OutputStream out = new FileOutputStream(file); write(out); InputStream in = new FileInputStream(file); read(in); } //将输入的字节流转换成输入的字符流 public static void read(InputStream in) throws IOException{ //输入流必须转换成输出流时指定的编码 Reader rd = new InputStreamReader(in,Charset.forName("gbk"));//将字节流转换成字符流; //Reader rd = new InputStreamReader(in,Charset.forName(charsetName));//转换默认编码; char cr[] = new char[1024]; StringBuilder str = new StringBuilder(); int len = -1; while((len=rd.read(cr))!=-1){ str.append(new String(cr,0,len)); } rd.close(); System.out.println(str); } //将输出字节流转换成输出字符流 public static void write(OutputStream out) throws IOException{ //输出流指定什么编码都可以; Writer wr = new OutputStreamWriter(out,Charset.forName("gbk")); wr.write("哈哈哈"); wr.close(); } }
字节缓冲流 BufferedOutputStream
解决写入数据到文件过程中,频繁的操作文件;
import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; public class Demo { public static void main(String[] args) throws IOException { bytewrite(); } public static void bytewrite() throws IOException{ File file = new File("C:\\Users\\zhengyan\\Desktop\\test1\\x.txt"); OutputStream out = new FileOutputStream(file); BufferedOutputStream bos = new BufferedOutputStream(out); //默认缓冲大小8192字节,可以指定大小 bos.write("你好".getBytes()); bos.close();//直接关闭bos,会自动关闭out } }

更多精彩