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();
    }
}

  

  java----文件操作 随笔

 

字节缓冲流    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
    }
}

  

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄