how2j.cn

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

步骤 1 :

练习-复制文件

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

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

答案-复制文件

edit
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
查看本答案会花费4个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
查看本答案会花费4个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
账号未激活 账号未激活,功能受限。 请点击激活
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

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 :

练习-复制文件夹

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

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

}
步骤 4 :

答案-复制文件夹

edit
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
查看本答案会花费4个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
查看本答案会花费4个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
账号未激活 账号未激活,功能受限。 请点击激活
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

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 :

练习-查找文件内容

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

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

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

答案-查找文件内容

edit
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
查看本答案会花费4个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
查看本答案会花费4个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
账号未激活 账号未激活,功能受限。 请点击激活
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

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公众号,关注后实时获知最新的教程和优惠活动,谢谢。


问答区域    
2020-02-19 交作业-作业2
shandd




交作业
package Practice;

import java.io.File;
import java.util.Scanner;


public class PracCopyDir {
	public static void main(String[] args) {
		System.out.println("请输入要拷贝的文件夹路径:");
		Scanner input = new Scanner(System.in);		
		String dirPath = input.nextLine().replace('\\', '/');
		String newPath = dirPath + "_new";
		copyDir(dirPath, newPath);
		System.out.println("拷贝完成!");
	}
	
	private static void copyDir(String dirPath, String newPath) {
		File dir = new File(dirPath);
		File newDir = new File(newPath);
		String subFilePath = "";
		String newSubFilePath = "";
		newDir.mkdir();
		File[] fileArrays = dir.listFiles();
		
		for (int i = 0; i < fileArrays.length; i++) {
			subFilePath = dirPath + "/" + fileArrays[i].getName();
			newSubFilePath = newPath + "/" + fileArrays[i].getName();
			
			if (fileArrays[i].isFile()) {
				PracCopyFile.copyFile(subFilePath, newSubFilePath);
				continue;
			}
			copyDir(subFilePath, newSubFilePath);
		}
	}
}
-------------------------------PracCopyFile.copyFile------------------------------
//用字节流拷贝
	public static void copyFile(String sourPath, String destPath) {
		File sourFile = new File(sourPath);
		File destFile = new File(destPath);	
		try (FileInputStream fis = new FileInputStream(sourFile);
			 FileOutputStream fos = new FileOutputStream(destFile);) {
			byte[] all = new byte[(int)sourFile.length()];
			fis.read(all);
			fos.write(all);
			fis.close();
			fos.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

							





回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2020-02-18 交作业1
shandd




字符流不适用大部分类型
package Practice;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.Scanner;

public class PracCopyFile {
	public static void main(String[] args) {
		System.out.println("输入要拷贝的文件:");
		Scanner input = new Scanner(System.in);
		String sourPath = input.next();//需解决文件名中有空格识别错误的问题
		sourPath = sourPath.replace('\\', '/');
		String destPath = newFileName(sourPath);
		File sourFile = new File(sourPath);
		File destFile = new File(destPath);		
		//用缓存流(字符流)拷贝,不适用于大部分文件
		//bufferedCopyFile(sourFile, destFile);
		//用字节流拷贝
		copyFile(sourFile, destFile);
		System.out.println("拷贝完成");
	}
	//命名新文件
	private static String newFileName(String sourPath) {
		int pathLength = sourPath.length();
		StringBuilder sb = new StringBuilder(sourPath);
		String reversePath = sb.reverse().toString();
		int splitPointIndex = reversePath.indexOf('.');
		String suffix = reversePath.substring(0, splitPointIndex);
		String fileName = reversePath.substring(splitPointIndex + 1, pathLength);
		StringBuilder sb1 = new StringBuilder(fileName);
		StringBuilder sb2 = new StringBuilder(suffix);
		fileName = sb1.reverse().toString();
		suffix = sb2.reverse().toString();
		String destPath = fileName + "1." + suffix;
		return destPath;
	}
	//用缓存流(字符流)拷贝
	private static void bufferedCopyFile(File sourFile, File destFile) {
		try ( FileInputStream fis = new FileInputStream(sourFile);
			  InputStreamReader isr = new InputStreamReader(fis);
			  BufferedReader br = new BufferedReader(isr);
			  FileOutputStream fos = new FileOutputStream(destFile);
			  OutputStreamWriter osw = new OutputStreamWriter(fos);
			  //FileWriter fw = new FileWriter(destFile);
			  PrintWriter pw = new PrintWriter(osw);) {
			
			while(true) {
				String line = br.readLine();
				if (null == line)
					break;
				pw.println(line);
			}
			//关闭写入缓存流,写入文件
			pw.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
	}
	//用字节流拷贝
	private static void copyFile(File sourFile, File destFile) {
		try (FileInputStream fis = new FileInputStream(sourFile);
			 FileOutputStream fos = new FileOutputStream(destFile);) {
			byte[] all = new byte[(int)sourFile.length()];
			fis.read(all);
			fos.write(all);
			fis.close();
			fos.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

							





回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2020-02-13 交作业+疑问
2020-02-10 交作业1,2,3 实测可运行
2020-01-24 练习一二三
2020-01-19 提交作业
2020-01-07 练习一,二,三
2020-01-04 问题三,交作业
2020-01-01 交作业,题目二,复制文件夹
2020-01-01 I/O 题目一,复制文件
2019-12-31 题目三
2019-12-31 题目二
2019-12-23 复制文件夹,实现如下方法,把源文件夹下所有的文件 复制到目标文件夹下(包括子文件夹)
2019-12-21 查找文件内容
2019-12-21 交作业:复制文件夹
2019-12-16 答案三合一(一个方法实现)
2019-12-13 交作业
2019-11-22 作业三合一
2019-11-12 练习 - 复制文件
2019-11-12 用序列化的方式复制文件---疑问
2019-10-26 小企业的作业Time-查找文件内容
2019-10-26 小企业的作业Time-复制文件夹
2019-10-26 小企业的作业Time-复制文件
2019-10-24 JAVA 用IO 流 复制文件时总是拒绝访问,为什么?(代码很简单)
2019-10-20 搜索文件的心得
2019-10-15 交作业
2019-10-15 交作业
2019-10-07 关于第三题的疑问
2019-09-29 最后一题思路和答案
2019-09-25 作业
2019-09-20 子文件复制。
2019-09-13 找到的文件最后会添加很多null??
2019-09-08 查找文件指定内容
2019-09-08 复制文件夹——复制文件+文件夹递归
2019-09-07 复制文件——文件字节输入/输出流
2019-09-07 复制文件——文件字节输入/输出流
2019-09-06 练习三:查找文件内容(java文件)
2019-09-06 练习答案
2019-09-05 练习二:复制文件夹(包含子文件)
2019-09-05 作业:复制文件夹(包含子文件)
2019-09-04 练习一:复制文件
2019-09-03 提示我写的目录拒绝访问是什么问题啊换了好几个目录了
2019-09-01 第二题
2019-09-01 第一题
2019-08-28 第二题作业各位指教
2019-08-07 return后面没有语句
2019-08-04 练习题3
2019-08-04 练习一
2019-08-04 练习题2
2019-08-04 提交作业
2019-08-04 复制文件
2019-07-30 交作业-练习1复制文件
2019-07-28 作业2:复制文件夹
2019-07-23 交作业
2019-07-22 第二题作业
2019-07-09 你系腚了。
2019-06-29 交作业,查找内容
2019-06-20 作业
2019-06-12 复制文件
2019-05-31 交作业 复制文件 有个问题请教一下大家
2019-05-28 ZZ交作业 IO综合练习 复制文件夹
2019-05-28 ZZ交作业 IO综合练习 查找文件内容
2019-05-28 ZZ交作业 IO综合练习 复制文件夹
2019-05-28 ZZ交作业 IO综合练习 复制文件
2019-05-10 查找字符
2019-05-10 复制文件 文件夹
2019-05-09 练习三交作业
2019-05-02 第二题
2019-04-21 交作业(一二三),欢迎暂时没思路的朋友来交流参考
2019-04-11 递归复制的问题
2019-04-11 交作业第二题
2019-03-26 练习题做不来是不是我学得还不够?
2019-03-26 代码
2019-03-19 作业三
2019-03-19 第二题作业
2019-03-16 第二题简略版
2019-03-16 作业:复制文件、复制文件夹、查找文件内容
2019-03-10 关于练习一,暂时没看答案,想请问下是否缓存流无法复制图片?
2019-02-15 作业一有点小疑惑,请帮忙看下
2019-02-13 第一题,为什么我复制过去的目标文件不换行,求帮忙看看
2019-01-30 交作業~
2019-01-23 交作业 第二题
2019-01-23 练习一 和练习二 可以 把 文件一复制到文件二中 (包括所有子文件和子文件夹)可能还有问题 欢迎交流
2019-01-22 第三题答案
2019-01-15 第一二题
2019-01-09 复制文件直接用FileInputStream 和 out ,的read和write不行吗
2019-01-05 交作业
2019-01-05 交作业 文件复制
2018-12-20 查找文件内容(简洁版, 采用递归法)
2018-12-20 查找文件内容(简洁版)
2018-12-20 查找文件内容