how2j.cn

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

步骤 1 :

练习-复制文件

edit  姿势不对,事倍功半! 点击查看做练习的正确姿势
复制文件是常见的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浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器


需要留意的是,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  姿势不对,事倍功半! 点击查看做练习的正确姿势
复制文件夹,实现如下方法,把源文件夹下所有的文件 复制到目标文件夹下(包括子文件夹)

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

}
步骤 4 :

答案-复制文件夹

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

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


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  姿势不对,事倍功半! 点击查看做练习的正确姿势

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浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器


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


问答区域    
2025-06-17 我的三道题答案
Zzz112138




已复制文件:d:\java\files\123-copy.jpg ------------------------------------------------ 已复制文件:d:\javaOut\123-source.zip 已复制文件:d:\javaOut\123.zip 已复制文件:d:\javaOut\123.zip-0.dat 已复制文件:d:\javaOut\123.zip-1.dat 已复制文件:d:\javaOut\123.zip-10.dat 已复制文件:d:\javaOut\123.zip-11.dat 已复制文件:d:\javaOut\123.zip-12.dat 已复制文件:d:\javaOut\123.zip-13.dat 已复制文件:d:\javaOut\123.zip-14.dat 已复制文件:d:\javaOut\123.zip-15.dat 已复制文件:d:\javaOut\123.zip-16.dat 已复制文件:d:\javaOut\123.zip-17.dat 已复制文件:d:\javaOut\123.zip-18.dat 已复制文件:d:\javaOut\123.zip-19.dat 已复制文件:d:\javaOut\123.zip-2.dat 已复制文件:d:\javaOut\123.zip-20.dat 已复制文件:d:\javaOut\123.zip-21.dat 已复制文件:d:\javaOut\123.zip-22.dat 已复制文件:d:\javaOut\123.zip-23.dat 已复制文件:d:\javaOut\123.zip-24.dat 已复制文件:d:\javaOut\123.zip-3.dat 已复制文件:d:\javaOut\123.zip-4.dat 已复制文件:d:\javaOut\123.zip-5.dat 已复制文件:d:\javaOut\123.zip-6.dat 已复制文件:d:\javaOut\123.zip-7.dat 已复制文件:d:\javaOut\123.zip-8.dat 已复制文件:d:\javaOut\123.zip-9.dat 已复制文件:d:\javaOut\src\DataStream.java 已复制文件:d:\javaOut\src\Hero.java 已复制文件:d:\javaOut\src\MyFile.java 已复制文件:d:\javaOut\src\ObjectStream.java 已复制文件:d:\javaOut\src\SystemInput.java 已复制文件:d:\javaOut\src\TestStream.java 已复制文件:d:\javaOut\test0\123.zip-0.dat 已复制文件:d:\javaOut\test0\123.zip-1.dat 已复制文件:d:\javaOut\test0\123.zip-2.dat 已复制文件:d:\javaOut\test1\123.zip-3.dat 已复制文件:d:\javaOut\test1\123.zip-4.dat 已复制文件:d:\javaOut\test1\123.zip-5.dat 已复制文件:d:\javaOut\test1\123.zip-6.dat 已复制文件:d:\javaOut\test1\123.zip-7.dat 已复制文件:d:\javaOut\test1\123.zip-8.dat 已复制文件:d:\javaOut\test1\123.zip-9.dat 已复制文件:d:\javaOut\test1\test0\123.zip-10.dat 已复制文件:d:\javaOut\test1\test0\123.zip-11.dat 已复制文件:d:\javaOut\test1\test0\123.zip-12.dat 已复制文件:d:\javaOut\test1\test0\123.zip-13.dat 已复制文件:d:\javaOut\test1\test0\123.zip-14.dat 已复制文件:d:\javaOut\test1\test0\123.zip-15.dat 已复制文件:d:\javaOut\test1\test0\test0\123.zip-16.dat 已复制文件:d:\javaOut\test1\test0\test0\123.zip-17.dat 已复制文件:d:\javaOut\test1\test0\test0\123.zip-18.dat 已复制文件:d:\javaOut\test1\test0\test0\123.zip-19.dat 已复制文件:d:\javaOut\test1\test0\test0\123.zip-20.dat 已复制文件:d:\javaOut\test1\test0\test0\123.zip-21.dat 已复制文件:d:\javaOut\test1\test0\test0\123.zip-22.dat 已复制文件:d:\javaOut\test1\test0\test0\123.zip-23.dat 已复制文件:d:\javaOut\test1\test0\test0\123.zip-24.dat 已复制文件:d:\javaOut\test2\123-source.zip ------------------------------------------------ 找到子目标字符串serialVersionUID, 在文件:d:\123\src\Hero.java
package HelloJava2;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Scanner;

public class MyFile {

	// 复制文件
	public static void copyFile(String srcFile, String destFile) {
		File fi = new File(srcFile);
		File fo = new File(destFile);
		if (!fo.getParentFile().exists()) {
			fo.getParentFile().mkdir();
		}

		try (FileInputStream fis = new FileInputStream(fi); FileOutputStream fos = new FileOutputStream(fo);) {
			byte[] all = new byte[(int) fi.length()];
			fis.read(all);
			fos.write(all);
			System.out.format("已复制文件:%s%n", fo.getAbsolutePath());
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	// 复制文件夹
	public static void copyFolder(String srcFolder, String destFolder) {
		File destFile = new File(destFolder);
		if (!destFile.exists()) {
			destFile.mkdirs();
		}

		File[] files = new File(srcFolder).listFiles();

		for (int i = 0; i < files.length; i++) {
			File target = new File(destFolder, files[i].getName());
			if (files[i].isDirectory()) {
				try {
					target.mkdirs();
					copyFolder(files[i].getAbsolutePath(), target.getAbsolutePath());
				} catch (NullPointerException e) {
					System.out.format("无文件夹访问权限:%s%n", files[i]);
					e.printStackTrace();
				}
			} else {
				copyFile(files[i].getAbsolutePath(), target.getAbsolutePath());
			}
		}
	}

	// 查找文件内容
	public static void search(File floder, String search) {
		File[] files = floder.listFiles();

		for (int i = 0; i < files.length; i++) {
			if (files[i].isDirectory()) {
				try {
					search(files[i], search);
				} catch (NullPointerException e) {
					System.out.format("无文件夹访问权限:%s%n", files[i]);
					e.printStackTrace();
				}
			} else {
				if (files[i].toString().endsWith(".java")) {

					try (Scanner scanner = new Scanner(files[i]);) {
						while (scanner.hasNextLine()) {
							String line = scanner.nextLine();
							if (line.contains(search)) {
								System.out.format("找到子目标字符串%s, 在文件:%s%n", search, files[i]);
								break;
							}
						}
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}
		}
	}

	public static void main(String[] args) {
		// 1.
		MyFile.copyFile("d:/java/files/123.jpg", "d:/java/files/123-copy.jpg");
		System.out.println("------------------------------------------------");

		// 2.
		MyFile.copyFolder("d:/123/", "d:/javaOut/");
		System.out.println("------------------------------------------------");

		// 3.
		MyFile.search(new File("d:/123/src/"), "serialVersionUID");
	}

}

							





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





2024-07-23 练习-查找文件内容
木宇




练习-查找文件内容
package com.cwt.study.java中级.s_20240722;

import java.io.*;

public class TestFile {
    //假设你的项目目录是 D:\java-study,遍历这个目录下所有的java文件(包括子文件夹),找出文件内容包括 Magic的那些文件,并打印出来。

    /**
     * 搜索文件内容
     * @param dir 需要搜索的目录
     * @param suffixName 需要搜索的文件后缀名
     * @param searchContent 搜索内容
     */
    public static void searchFile(String dir,String suffixName,String searchContent){
        //查找.java结尾文件
        File dirFile = new File(dir);
        File[] files = dirFile.listFiles();
        for (File s : files){
            if (s.isFile()) {
                //判断文件
                if(s.getName().endsWith(suffixName)){
                    try {
                        FileReader fileReader = new FileReader(s);
                        BufferedReader bufferedReader = new BufferedReader(fileReader);
                        while (true){
                            String line = bufferedReader.readLine();
                            if(line == null){
                                break;
                            }
                            if (line.contains(searchContent)) {
                                System.out.println("搜索内容: "+line+",找到文件位置: "+s.getAbsolutePath());
                            }
                        }
                    } catch (FileNotFoundException e) {
                        throw new RuntimeException(e);
                    } catch (IOException e) {
                        throw new RuntimeException(e);
                    }
                }
            } else {
                //判断文件夹
                searchFile(s.getAbsolutePath(),suffixName,searchContent);

            }
        }


    }
    public static void main(String[] args) {
        searchFile("D:\\java-study",".txt","magic");

    }
}

							





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





2024-07-07 一种寻找指定路径下的所有文件中存在指定信息的所有文件
2024-07-07 创建指定文件夹中所有文件的副本(包含子文件夹和子文件)
2024-05-27 三道题的答案


提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 108 条以前的提问,请 点击查看

提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
关于 JAVA 中级-I/O-综合练习 的提问

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

上传截图