写在之前:
对于io这部分的学习 从一开始的文件对象就已经感受到 要应用的方法很多很难去把这些方法根据需求进行灵活运用 这和之前学习C语言的文件操作有关 之前就没咋学好 但是Java的文件这方面确实比C语言易理解 。
感谢 how2J 教程带我学Java
综合练习分三个题对以往学习的常用方法进行评测掌握情况
1、文件复制
package test;
import java.io.*;
import java.util.Scanner;
public class testFile{
public static void main(String[] args) {
String str1="D:\\Jproject\\流.txt";
String str2="D:\\Jproject\\by.txt";
copyFile(str1,str2);
}
public static void copyFile(String srcFile,String destFile) {
File f1=new File(srcFile);
File f2=new File(destFile);
try(
FileInputStream fi=new FileInputStream(f1);
FileOutputStream fo=new FileOutputStream(f2);
FileReader fg=new FileReader(f2);
BufferedReader fb=new BufferedReader(fg);
)
{
byte[] by=new byte[(int)f1.length()];
fi.read(by);
fo.write(by);
while(fb.readLine()!=null)
{
String str=fb.readLine();
System.out.println(str);
}
}catch(IOException e)
{
e.printStackTrace();
}
}
}
文件复制 是在这三个题我做着是最轻松的 这和目前在学习的字符流 缓存流有关 还没忘记
2、复制文件夹
复制文件和复制文件夹 一字之差 但是复制文件夹我第一反应就是回去看文件对象里的一些常用方法 试着码了一下 但是还是忽略了文件和文件夹的关系 文件夹打开还有文件夹就还得打开至文件 ——让我知道以后关于文件夹的操作 和递归思想是有很大关系的
public static void copyFolder(String srcfolder,String destfolder)
{
File f1=new File(srcfolder);
File f2=new File(destfolder);
if(!f2.exists())
{
f2.getParentFile().mkdirs();
}
File[] fz=f1.listFiles();
if (fz.length == 0) {
f1.mkdirs();
}
else {
for (File file : fz) {
if(file.isDirectory())
{
copyFolder(file.getAbsolutePath(),destfolder+"\\"+file.getName());
}
else if(file.isFile())
{
copyFolder(file.getAbsolutePath(), destfolder+"\\"+file.getName());
}
}
}
}
}
越往后学 要回顾的越多 方法自身调用就是递归 遇到层层包含的问题 一般用递归层层打开。
3、查找文件内容
也是对于文件操作的必备技能。
其一般是把包含的特定字符串的文件全部找出 也是检索作用。
其对象涉及文件 那么存在文件夹也需要递归
public static void search(File folder, String search)
{
File[] fi=folder.listFiles();
for (File file : fi) {
if(file.isDirectory())
{
search(file,search);
}
else
{
String line;
try(
FileReader fr=new FileReader(file);
BufferedReader br = new BufferedReader(fr);
)
{
while(null!=(line=br.readLine()))
{
if(line.contains(search)){
System.out.printf("找到子目标字符串%s,在文件%s\n",search,file.getAbsolutePath());
break;
}
}
}catch(IOException e)
{
e.printStackTrace();
}
}
}
也是先分两种情况 一是File[] fi=folder.listFiles();遍历的文件数组 是文件夹就需要进行递归直至找到文件 二是遍历过程中已是文件就直接进行相应操作又考虑到文件内容多 用缓存流最好一行行读取进行相应字符串的查询 调用String类里的方法Contain 快捷查找
总结: 更多考验的是 对于基础的类的方法掌握熟练程度 在对其进行记忆的同时也得灵活运用 可以在之后对操纵字符串 以及比较字符串 Character String 文件对象 Data Calendar 日期格式化所涉及的类及方法 这些所含的常用方法进行画图分类记忆