【I/O流】知识点合集

替换文本文件内容

public static void main(String[] args) throws IOException {
		//替换前字符串
		String before="a";
		//替换后字符串
		String after="b";
		
		//创建文件读流
		FileReader reader=null;
		//创建文件写流
		FileWriter writer =null;
		//使用StringBuilder对想保存文件内容
		StringBuilder sb=new StringBuilder();
		//声明文件读入标识
		int flag=0;
		//使用字符数组读入文件
		char[] temp=new char[1024];
		File textFile=new File("f:\\1.txt");
		
		try {
			//使用选择的文件创建读流
			reader=new FileReader(textFile);
			while((flag=reader.read(temp))!=-1){
				//读入文件中的内容
				sb.append(temp);
			}
			//替换字符串
			String content=sb.toString().replace(before, after);
			//创建文件写流
			writer =new FileWriter(textFile);
			//将替换后的字符串写入到文件
			writer.write(content);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			writer.flush();
			writer.close();
		}	
}

文件重命名和快速移动文件

    File file=new File("F:\\1.txt");
    //既可以修改名称,有可以修改绝对路径,实现快速移动文件	
    file.renameTo(new File("F:\\2.txt"));

对大文件实现分割、合并处理

	/**
	 * 
	 * @param commFile 需要分割的文件
	 * @param untieFile 分割后保存的文件
	 * @param filesize 分割多少个
	 */
	public void fenGe(File commFile,File untieFile,int filesize){
		FileInputStream fis=null;
		//用来指定分割文件以MB为单位
		int size =1024*1024;
		
		try {
			//如果保存分割文件地址不是路径
			if(untieFile.isDirectory()){
				//创建该路径
				untieFile.mkdirs();
			}
			size=size*filesize;
			//获取文件大小
			int length=(int)commFile.length();
			//获取文件大小除以MB的得数
			int num=length/size;
			//获取文件大小与MB相除的余数
			int yu=length % size;
			//获取保存文件的完成路径信息
			String newfengeFile=commFile.getAbsolutePath();
			int fileNew =newfengeFile.lastIndexOf(".");
			//截取字符串
			String strNew= newfengeFile.substring(fileNew,newfengeFile.length());
			//创建FileInputStream类对象
			fis=new FileInputStream(commFile);
			//创建文件数组
			File[] fl=new File[num+1];
			int begin=0;
			//循环遍历数组
			for(int i=0;i<num;i++){
				//指定分割后小文件的文件名
				fl[i]=new File(untieFile.getAbsolutePath()+"\\"+(i+1)+strNew+".tem");
				if(!fl[i].isFile()){
					//创建该文件
					fl[i].createNewFile();
				}
				FileOutputStream fos=new FileOutputStream(fl[i]);
				byte[] bl=new byte[size];
				//读取分割后的小文件
				fis.read(bl);
				//写文件
				fos.write(bl);
				begin=begin+size*1024*1024;
				//关闭流
				fos.close();
				
			}
			//文件大小与指定文件分割大小相除的余数不为0;
			if(yu !=0){
				//指定文件分割后数组中最后一个文件名
				fl[num]=new File(untieFile.getAbsolutePath()+"\\"+(num+1)+strNew+".tem");
				if(!fl[num].isFile()){
					//新建文件
					fl[num].createNewFile();
				}
				FileOutputStream fyu=new FileOutputStream(fl[num]);
				byte[] byt=new byte[yu];
				fis.read(byt);
				fyu.write(byt);
				fyu.close();
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
 
/**
	 * 合并文件
	 * @param file 需要合并的文件
	 * @param cunDir 合并后的文件
	 * @param hz 
	 */
	public void heBing(File[] file,File cunDir, String hz){
		try {
			//指定分割后文件的文件名
			File heBingFile=new File(cunDir.getAbsoluteFile()+"\\UNTIE"+hz);
			if(!heBingFile.isFile()){
				heBingFile.createNewFile();
			}
			//创建FileOutputStream对象
			FileOutputStream fos=new FileOutputStream(heBingFile);
			//循环遍历要进行合并的文件数组对象
			for(int i=0;i<file.length;i++){
				FileInputStream fis=new FileInputStream(file[i]);
				//获取文件长度
				int len=(int)file[i].length();
				byte[]bRead=new byte[len];
				//读取文件
				fis.read(bRead);
				//写入文件
				fos.write(bRead);
				//将流关闭
				fis.close();
				
			}
			fos.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

对文件进行读取

仅需要用File对象构造一个Scanner对象

Scanner in= new Scanner(Paths.get("myfile.tet"),"UTF-8");

如果文件名中含反斜杠符号,需要在每个反斜杠之前加一个额外的反斜杠
如:“c:\mydirectory\myfile.txt”

猜你喜欢

转载自blog.csdn.net/hutuyaoniexi/article/details/85014020