how2j.cn

步骤 1 : 练习-复制文件   
步骤 2 : 答案-复制文件   
步骤 3 : 练习-复制文件夹   
步骤 4 : 答案-复制文件夹   
步骤 5 : 练习-查找文件内容   
步骤 6 : 答案-查找文件内容   

步骤 1 :

练习-复制文件

Or  姿势不对,事倍功半! 点击查看做练习的正确姿势
复制文件是常见的IO操作,设计如下方法,实现复制源文件srcFile到目标文件destFile

public static void copyFile(String srcFile, String destFile){
}
步骤 2 :

答案-复制文件

在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

4分49秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)


需要留意的是,read会返回实际的读取数量,有可能实际的读取数量小于缓冲的大小,那么把缓冲中的数据写出到目标文件的时候,就只应该写出部分数据。
package stream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class TestStream { /** * * @param srcPath 源文件 * @param destPath 目标文件 */ public static void copyFile(String srcPath, String destPath){ File srcFile = new File(srcPath); File destFile = new File(destPath); //缓存区,一次性读取1024字节 byte[] buffer = new byte[1024]; try ( FileInputStream fis = new FileInputStream(srcFile); FileOutputStream fos = new FileOutputStream(destFile); ){ while(true){ //实际读取的长度是 actuallyReaded,有可能小于1024 int actuallyReaded = fis.read(buffer); //-1表示没有可读的内容了 if(-1==actuallyReaded) break; fos.write(buffer, 0, actuallyReaded); fos.flush(); } } catch (IOException e) { e.printStackTrace(); } } /** * * @param srcPath 源文件夹 * @param destPath 目标文件夹 */ public static void copyFolder(String srcPath, String destPath){ } public static void main(String[] args) { copyFile("d:/lol.txt", "d:/lol2.txt"); } }
步骤 3 :

练习-复制文件夹

Or  姿势不对,事倍功半! 点击查看做练习的正确姿势
复制文件夹,实现如下方法,把源文件夹下所有的文件 复制到目标文件夹下(包括子文件夹)

public static void copyFolder(String srcFolder, String destFolder){

}
步骤 4 :

答案-复制文件夹

在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

4分25秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)


package stream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class TestStream { /** * * @param srcPath 源文件 * @param destPath 目标文件 */ public static void copyFile(String srcPath, String destPath){ File srcFile = new File(srcPath); File destFile = new File(destPath); //缓存区,一次性读取1024字节 byte[] buffer = new byte[1024]; try ( FileInputStream fis = new FileInputStream(srcFile); FileOutputStream fos = new FileOutputStream(destFile); ){ while(true){ //实际读取的长度是 actuallyReaded,有可能小于1024 int actuallyReaded = fis.read(buffer); //-1表示没有可读的内容了 if(-1==actuallyReaded) break; fos.write(buffer, 0, actuallyReaded); fos.flush(); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * * @param srcPath 源文件夹 * @param destPath 目标文件夹 */ public static void copyFolder(String srcPath, String destPath){ File srcFolder = new File(srcPath); File destFolder = new File(destPath); //源文件夹不存在 if(!srcFolder.exists()) return; //源文件夹不是一个文件夹 if(!srcFolder.isDirectory()) return; //目标文件夹是一个文件 if(destFolder.isFile()) return; //目标文件夹不存在 if(!destFolder.exists()) destFolder.mkdirs(); //遍历源文件夹 File[] files= srcFolder.listFiles(); for (File srcFile : files) { //如果是文件,就复制 if(srcFile.isFile()){ File newDestFile = new File(destFolder,srcFile.getName()); copyFile(srcFile.getAbsolutePath(), newDestFile.getAbsolutePath()); } //如果是文件夹,就递归 if(srcFile.isDirectory()){ File newDestFolder = new File(destFolder,srcFile.getName()); copyFolder(srcFile.getAbsolutePath(),newDestFolder.getAbsolutePath()); } } } public static void main(String[] args) { copyFolder("d:/LOLFolder", "d:/LOLFolder2"); } }
步骤 5 :

练习-查找文件内容

Or  姿势不对,事倍功半! 点击查看做练习的正确姿势

public static void search(File folder, String search);

假设你的项目目录是 e:/project,遍历这个目录下所有的java文件(包括子文件夹),找出文件内容包括 Magic的那些文件,并打印出来。
练习-查找文件内容
步骤 6 :

答案-查找文件内容

在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

4分6秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)


package stream; import java.io.File; import java.io.FileReader; import java.io.IOException; public class TestStream { /** * @param file 查找的目录 * @param search 查找的字符串 */ public static void search(File file, String search) { if (file.isFile()) { if(file.getName().toLowerCase().endsWith(".java")){ String fileContent = readFileConent(file); if(fileContent.contains(search)){ System.out.printf("找到子目标字符串%s,在文件:%s%n",search,file); } } } if (file.isDirectory()) { File[] fs = file.listFiles(); for (File f : fs) { search(f, search); } } } public static String readFileConent(File file){ try (FileReader fr = new FileReader(file)) { char[] all = new char[(int) file.length()]; fr.read(all); return new String(all); } catch (IOException e) { e.printStackTrace(); return null; } } public static void main(String[] args) { File folder =new File("e:\\project"); search(folder,"Magic"); } }


HOW2J公众号,关注后实时获知布最新的教程和优惠活动,谢谢。


问答区域    
2018-09-20 作业123
AKZ



作业123
package io;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.FilenameFilter;
import java.io.PrintWriter;
//Comprehensive practice:综合练习
public class ComprehensivePractice {
	/*
	 * 设计如下方法,实现复制源文件srcFile到目标文件destFile
	 */
public static void copyFile(String srcFile,String destFile){
	File srcfile=new File(srcFile);
	File destfile=new File(destFile);
	try(BufferedReader br=new BufferedReader(new FileReader(srcfile));
			PrintWriter pw=new PrintWriter(new FileWriter(destfile));)
	 {
		//System.out.println(srcfile.getName()+"文件复制开始...");
		while(true){
			String line=br.readLine();
			if(line==null)
				break;
			pw.println(line);
		}
		//System.out.println(srcfile.getName()+"文件复制以结束");
	} catch (Exception e) {
		// TODO: handle exception
	}
}
/*
 *设计如下方法,把源文件夹下所有的文件复制到目标文件夹下(包括子文件夹)
 */
public static void copyFolder(String srcFolder,String destFolder){
	//文件
	File srcfolder=new File(srcFolder);
	//文件夹
	File destfolder=new File(destFolder);
	System.out.println("1");
	File f[]=srcfolder.listFiles();
	File test=null;
	for(File f1:f){
		if(f1.isFile()){
			copyFile(f1.getAbsolutePath(),new File(destFolder,f1.getName()).getAbsolutePath());
			
		}
		else{
			test=new File(destFolder,f1.getName());
			System.out.println("test:  "+test.getAbsolutePath());
			System.out.println("test是否存在:"+test.exists());
			//先创建目录
			if(!test.exists())
				test.mkdirs();
			System.out.println("test是否存在:"+test.exists());
			ergodic(f1.getAbsolutePath(),test.getAbsolutePath());
		}
	}
}
//遍历文件目录
public static void ergodic(String srcFile,String destFile) {
	File srcfile=new File(srcFile);
	//File destfile=new File(destFile);
	File f[]=srcfile.listFiles();
	File test=null;
	for(File f1:f){
		if(f1.isFile()){
			copyFile(f1.getAbsolutePath(),new File(destFile,f1.getName()).getAbsolutePath());
		}
		else{
			test=new File(destFile,f1.getName());
			if(!test.exists())
				test.mkdirs();
		//	bianli(f1.getAbsolutePath(),destFile);	
			ergodic(f1.getAbsolutePath(),test.getAbsolutePath());
		}
	}
	
}
/*
 *	练习-查找文件内容     
 * 	假设你的项目目录是 e:/project,遍历这个目录下所有的java文件(包括子文件夹),找出文件内容包括 Magic的那些文件,并打印出来。
 */

public static void search(File folder,String search,String destFolder) {
	if(!folder.exists()) {
		System.out.println("项目目录不存在...");
		return;
	}
	System.out.println("已开始查找指定文件...");
	File test=null;
	File file[]=folder.listFiles();
	File desk=new File(destFolder);
	if(!desk.exists())
		desk.mkdirs();
	for(File f:file) {
		if(f.isFile()) {
			if(f.getName().endsWith(".java")) {
				try (BufferedReader br=new BufferedReader(new FileReader(f))){
					while(true) {
						String line=br.readLine();
						int i=0;
						if(line==null) 
							break;
						if(line.contains(search)) {
							i++;
							System.out.println(f.getAbsolutePath()+"满足要求,位置在"+i+"行,"+"其内容是:"+line);
							test=new File(folder.getAbsolutePath(),f.getName());
							System.out.println(desk.getAbsolutePath()+test.getName());
							copyFile(test.getAbsolutePath(),desk.getAbsolutePath()+"/"+test.getName());
					
						}
							}
				} catch (Exception e) {
					// TODO: handle exception
				}
				
			}
			else {
				continue;
				
			}
			
		}
		else {
			ergodic(f, search,destFolder);
		}
	}
	System.out.println("查找结束,指定文件已保存在:"+desk.getParentFile().getAbsolutePath()+"中的"+desk.getName()+"文件夹中...");
}
//遍历文件目录的重载方法
public static void ergodic(File folder,String search,String destFolder) {
	File file[]=folder.listFiles();
	File test=null;
	File desk=new File(destFolder);
	for(File f:file) {
		if(f.isFile()) {
			if(f.getName().endsWith(".java")) {
				try(BufferedReader br=new BufferedReader(new FileReader(f))) {
					while(true) {
						String line=br.readLine();
						int i=0;
						if(line==null)
							break;
						if(line.contains(search)) {
							i++;
							System.out.println(f.getAbsolutePath()+"满足要求,位置在"+i+"行,其内容是:"+line);
							test=new File(folder.getAbsoluteFile(),f.getName());
							copyFile(test.getAbsolutePath(), desk.getAbsolutePath()+"/"+test.getName());
						}
					}
				} catch (Exception e) {
					// TODO: handle exception
				}
			}
			else {
				continue;
			}
		}
		else {
			ergodic(f,search,destFolder);
		}
	}
}
public static void main(String[] args) {
	//只复制文件
		//copyFile("d:/a.txt","d:/b.txt");
		//复制文件到某一文件夹中
	//copyFolder("d:/a.txt", "d:/FileFolder");
	//复制某一文件夹中的文件到另一文件夹
	//copyFolder("e:/xyz","e:/2");
	//System.out.println(new File("d:/FileFolder").getName());
//	search(new File("g:/study_All"),"Magic");
	//File f=new File("G:\\\\Java文档\\\\study__All\\\\lol4.txt");
	//System.out.println(f.getName());
	//System.out.println(f.getName().endsWith(".txt"));
	File f=new File("G:\\Java文档");
	search(f, "Magic","C:/Users/Administrator.000/Desktop/MagicFile");
	
}
}

							






答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2018-09-10 作业!加油,
Hello_Cyoung



public class dog { public string haha; public dog() { } public void setHaha(string haha){ this.Haha = Haha; } public string getHaha(){ return this.Haha; } } ---------------------------------------------------- ---------------------------------------------------- e:\filetest\codetest\lol2\MyWord.txt e:\filetest\codetest\OriginalCode.txt e:\filetest\codetest\remove\New.txt e:\filetest\codetest\UTF-8.txt
package ioFlow;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class IOPractice {
	public static void main(String[] args) {
		copyFile("e:/filetest/lol.txt","e:/filetest/lol2.txt");
		System.out.println("----------------------------------------------------");
		copyFolder("e:/filetest/lol","e:/filetest/lol2");
		System.out.println("----------------------------------------------------");
		File folder = new File("e:/filetest/codetest");
		search(folder,"Cyoung");
		
	}
	
//	复制文件是常见的IO操作,设计如下方法,实现复制源文件srcFile到目标文件destFile
	public static void copyFile(String srcFile,String destFile) {
		File sf = new File(srcFile);
		File df = new File(destFile);
		try(
				FileReader fr = new FileReader(sf);
				BufferedReader br = new BufferedReader(fr);
				FileWriter fw = new FileWriter(df);
				BufferedWriter bw = new BufferedWriter(fw);
			)
		{
			char[] date = new char[(int)sf.length()];
//			fr.read(date);
			br.read(date);
			System.out.println(date);
//			fw.write(date);
			bw.write(date);
		}
		catch(IOException e) {
			e.printStackTrace();
		}
	}
	
	
//	复制文件夹,实现如下方法,把源文件夹下所有的文件 复制到目标文件夹下(包括子文件夹)
	public static void copyFolder(String srcFolder,String destFolder) {
		File sf = new File(srcFolder);
		File df = new File(destFolder);
		if(df.exists()) {
			deleteAll(df);
			df.mkdirs();
		}
		else {
			df.mkdirs();
		}
		
		if(sf.exists()) {
			copyAll(sf,df);
		}
		else {
			System.out.println("源文件不存在,无法进行复制!!");
		}
	}
	//	递归删除文件夹中的子文件以及文件夹中的文件
	public static void deleteAll(File file) {
		for(File each : file.listFiles()) {
			if(each.isFile()) {
				each.delete();
			}
			else if(each.isDirectory()) {
				deleteAll(each);	//如果文件夹中有文件,不能直接删除文件夹!
				each.delete();
			}
		}
		file.delete();
		
	}
	//	递归方法复制文件夹中所有的文件及文件夹到目标文件中
	public static void copyAll(File srcFolder,File destFolder){
		for(File each : srcFolder.listFiles()) {
			if(each.isDirectory()) {
				File newFolder = new File(destFolder,each.getName());
				newFolder.mkdir();
				copyAll(each,newFolder);
			}
			else if(each.isFile()) {
				File newFile = new File(destFolder,each.getName());
				try{
					newFile.createNewFile();
				}
				catch(IOException e) {
					e.printStackTrace();
				}
				copyFile(each.toString(),newFile.toString());	//利用前面创造的复制文件方法复制文件
			}
		}
		
	}
	
	
//	假设你的项目目录是 e:/project,遍历这个目录下所有的java文件(包括子文件夹),找出文件内容包括 Magic的那些文件,并打印出来。
	public static void search(File folder,String str) {
		for(File each : folder.listFiles()) {	//遍历目标文件夹
			if(each.isDirectory()) {
//				System.out.println(each.toString());
				search(each,str);
			}
			else {
				if((each.toString()).endsWith(".txt")) {	//如果是.txt文件,搜寻内容
					File searchFile = new File(each.toString());
//					System.out.println(each.toString());
					try(
							FileReader fr = new FileReader(searchFile);
							BufferedReader br = new BufferedReader(fr);
						)
					{
//						char[] date = new char[(int)searchFile.length()];
//						fr.read(date);
//						System.out.println(date);
//						for(int i=0;i<date.length;i++) {
//							System.out.println(date[i]);
//						}
						while(true) {
							String s = br.readLine();
							if(s == null)
								break;
							if(s.contains(str))
								System.out.println(each.toString());
						}
					}
					catch(IOException e) {
						e.printStackTrace();
					}
				}
			}
			
		}
	}
	
}

							






答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2018-08-24 练习二:递归实现复制多级文件夹
2018-08-24 交作业1、2
2018-08-19 交作业,第二题
2018-08-16 教作业,╭(╯^╰)╮!!
2018-08-16 交作业,╭(╯^╰)╮
2018-08-04 练习题一,麻烦站长解答一下我的问题!
2018-07-31 练习(全)
2018-07-29 交作业
2018-07-08 第六题 查找文件内容 读。java文件会不会出现内存用光的情况
2018-06-18 为什么最后一题要加return null;
2018-06-11 无限递归,文件夹还删不了
2018-06-07 复制文件夹那一题为什么创建File对象的时候为什么不需要用File.createNewFIile()来创建文件。 File构造方法不是不能自动创建文件吗
2018-05-29 第三题
2018-05-29 第三题
2018-05-23 分享
2018-04-24 用BufferedInputStream和BufferedOutputStream复制文件
2018-04-24 最后一题答案
2018-03-27 交作业
2018-03-23 每个月不应该送点积分吗,恩?
2018-02-01 拒绝访问???
2017-12-03 复制文件夹的时候可能出现无限递归
2017-11-19 复制文件用了缓存流可以吗
2017-10-19 关于递归的那个return,为什么我有加没加效果都一样?
2017-09-25 查找目标文件过大
2017-08-15 另一个程序已锁定文件的一部分,进程无法访问。
2017-08-15 站长什么时候讲讲nio啊
2017-08-14 bufferinputstream
2017-06-29 如题
2017-04-13 什么时候用什么样的流有没有一个总结?感觉经常就想不起来用啥
2017-03-26 复制文件为什么要设置缓存区呢
2017-03-15 练习一:复制文件后与源文件内存大小不一致问题




提问之前请登陆
关于 JAVA 中级-I/O-综合练习 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 902680467
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
在已经存在的几千个提问里,有相当大的比例,是因为使用了和站长不同版本的开发环境导致的,比如 jdk, eclpise, idea, mysql,tomcat 等等软件的版本不一致。
请使用和站长一样的版本,可以节约自己大量的学习时间。 站长把教学中用的软件版本整理了,都统一放在了这里, 方便大家下载: http://how2j.cn/k/helloworld/helloworld-version/1718.html

上传截图