🎊专栏【Java小练习】
🍔喜欢的诗句:天行健,君子以自强不息。
🎆音乐分享【如愿】
🎄欢迎并且感谢大家指出小吉的问题🥰
文章目录
- 🍔需求
- ⭐思路
- ✨代码
- ✨效果
- 🎄如果要复制的不是txt文件,怎么办
- ⭐思路
🍔需求
编写程序,将某个目录下所有txt文件的内容拷贝到一个新的目录中。
⭐思路
这段代码的主要思路是将一个文件夹中的所有以".txt"结尾的文件复制到另一个文件夹中。
以下是该代码的实现步骤:
首先,我们使用File类封装源文件夹路径和目标文件夹路径,分别对应"a"和"b"文件夹。
使用listFiles()方法获取源文件夹中以".txt"结尾的所有文件,并将它们存储在一个File数组中。
创建目标文件夹,如果目标文件夹不存在的话,使用mkdirs()方法创建。
遍历源文件夹中的每个文件:
使用BufferedReader读取每个文件的内容。
使用BufferedWriter将读取到的内容写入目标文件夹中的文件。
关闭输入输出流和文件读写器。
完成所有文件的拷贝后,在控制台打印出拷贝完成的消息。
总体来说,代码通过遍历源文件夹中的每个文件,并逐行读取其内容,然后将内容写入目标文件夹中的相应文件中。这样就实现了从一个文件夹向另一个文件夹的文件复制功能。
✨代码
import java.io.*;
public class AddList {
public static void main(String[] args) {
// 封装目录
File srcDir = new File("F:\\a");
// 获取该目录下所有的txt文件
File[] txtFiles = srcDir.listFiles(file -> file.getName().endsWith(".txt"));
// 封装目的地
File destDir = new File("F:\\b");
if (!destDir.exists()) {
destDir.mkdirs();
}
for (File txtFile : txtFiles) {
try {
// 构建目标文件对象
File targetFile = new File(destDir, txtFile.getName());
// 创建输入输出流对象并复制数据
InputStream is = new FileInputStream(txtFile);
OutputStream os = new FileOutputStream(targetFile);
byte[] buffer = new byte[1024];
int length;
while ((length = is.read(buffer)) > 0) {
os.write(buffer, 0, length);
}
// 关闭输入输出流
is.close();
os.close();
System.out.println(txtFile.getName() + " 文件已经复制到 " + targetFile.getPath());
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println("所有txt文件的内容已经拷贝到b文件夹中。");
}
}
✨效果
🎄如果要复制的不是txt文件,怎么办
如果我们复制粘贴的不是txt文件,可能存在其他特殊情况,特殊情况需要特殊对待
这种情况要考虑复制文件夹的情况
⭐思路
获取源文件夹和目标文件夹的路径。
-
创建目标文件夹。
使用File类的mkdirs()方法创建目标文件夹,确保父文件夹也被创建。 -
遍历源文件夹中的所有文件和子文件夹。
使用File类的listFiles()方法获取源文件夹中的所有文件和文件夹。
遍历文件和文件夹列表。 -
如果是文件,则进行文件复制。
使用File类的InputStream和OutputStream创建输入和输出流。
使用byte数组作为缓冲区,从输入流读取数据,并将数据写入输出流。 -
如果是文件夹,则进行递归复制。
递归调用复制文件夹的方法,传递当前子文件夹的路径作为新的源文件夹路径。
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileCopy {
public static void main(String[] args) {
File sourceDir = new File("sourceFolderPath"); // 源文件夹路径
File destDir = new File("destinationFolderPath"); // 目标文件夹路径
if (!destDir.exists()) {
destDir.mkdirs(); // 如果目标文件夹不存在,则创建
}
copyFiles(sourceDir, destDir);
System.out.println("所有文件已经成功复制到目标文件夹中。");
}
private static void copyFiles(File source, File destination) {
if (source.isFile()) {
try (FileInputStream fis = new FileInputStream(source);
FileOutputStream fos = new FileOutputStream(new File(destination, source.getName()))) {
byte[] buffer = new byte[1024];
int length;
while ((length = fis.read(buffer)) > 0) {
fos.write(buffer, 0, length); // 将文件内容写入目标文件夹中的对应文件
}
} catch (IOException e) {
e.printStackTrace();
}
} else if (source.isDirectory()) {
File[] files = source.listFiles();
if (files != null) {
for (File file : files) {
File newDestination = new File(destination, file.getName());
if (file.isDirectory()) {
newDestination.mkdirs(); // 如果当前文件是文件夹,则在目标文件夹中创建对应的文件夹
}
copyFiles(file, newDestination); // 递归复制子文件夹中的文件
}
}
}
}
}
这样子,我们就完成了复制粘贴操作
在技术的道路上,我们不断探索、不断前行,不断面对挑战、不断突破自我。科技的发展改变着世界,而我们作为技术人员,也在这个过程中书写着自己的篇章。让我们携手并进,共同努力,开创美好的未来!愿我们在科技的征途上不断奋进,创造出更加美好、更加智能的明天!