java学习-文件IO练习

1.移除注释

设计一个方法,用于移除Java文件中的注释

效果图:

 

 1 package IOTest;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.File;
 5 import java.io.FileReader;
 6 import java.io.FileWriter;
 7 import java.io.IOException;
 8 import java.io.PrintWriter;
 9 
10 public class test {
11 
12     public static void printFile(File newF) {// 逐行打印传进来的文件对象
13         try (FileReader fr = new FileReader(newF); BufferedReader br = new BufferedReader(fr)) {
14             while (true) {
15                 String str = br.readLine();
16                 if (str == null)
17                     break;
18                 System.out.println(str);
19             }
20         } catch (IOException e) {
21             // TODO Auto-generated catch block
22             e.printStackTrace();
23         }
24     }
25 
26     public static void main(String[] args) {
27 
28         File f = new File("F:\\project\\javastudy\\src\\HelloWorld.java");// 原文件f
29         File newF = new File("F:\\project\\javastudy\\src\\HelloWorld2.java");// 删掉含有“//”那一行之后的新建立的文件newF
30 
31         System.out.println("原文件内容是:");
32         printFile(f);// 打印原文件内容
33         try (FileReader fr = new FileReader(f);
34                 FileWriter fw = new FileWriter(newF);
35 
36                 BufferedReader br = new BufferedReader(fr); // 读取每一行要用BufferedReader
37                 PrintWriter pw = new PrintWriter(fw);) {// 写入每一行要用PrintWriter
38             // 原文件f、fr、br;新文件newF、fw、pw
39             while (true) {
40                 String str = br.readLine();
41                 if (str == null)
42                     break;
43                 if (!str.contains("//")) {// 含有注释,则不写入,即把含有注释的那行”删了“
44                     pw.println(str);
45                 }
46 
47             }
48         } catch (IOException e) {
49             // TODO Auto-generated catch block
50             e.printStackTrace();
51         }
52         System.out.println("新文件内容是:");
53         printFile(newF);// 打印文件内容
54     }
55 }

2.自动创建类

自动创建有一个属性的类文件。
通过控制台,获取类名,属性名称,属性类型,根据一个模板文件,自动创建这个类文件,并且为属性提供setter和getter

已有模板文件module.txt,内容为:

public class @class@ {
    public @type@ @property@;
    public @class@() {
    }
    public void set@Uproperty@(@type@  @property@){
        this.@property@ = @property@;
    }
      
    public @type@  get@Uproperty@(){
        return this.@property@;
    }
}

注:@中间的内容是要替换的字符串@

要求自动生成module.java,其内容应该是(举个例子):

public class Dog {
    public String name;
    public Dog() {
    }
    public void setName(String  name){
        this.name = name;
    }
      
    public String  getName(){
        return this.name;
    }
}

 1 package IOTest;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.File;
 5 import java.io.FileReader;
 6 import java.io.FileWriter;
 7 import java.io.IOException;
 8 import java.io.PrintWriter;
 9 import java.util.Scanner;
10 
11 public class test6 {
12     public static void func(String className, String attributeClass, String attributeName) {
13         // 下面这句看似复杂,其实就是把attributeName的首字母大写,其他不变而已,(替换后settter和getter看起来顺眼一点)
14         String upAttributeName = attributeName.substring(0, 1).toUpperCase()
15                 + attributeName.substring(1, attributeName.length());
16 
17         File f = new File("d:/module.txt");
18         File newF = new File("d:/module.java");
19 
20         // 逐行替换
21         try (FileReader fr = new FileReader(f);
22                 BufferedReader br = new BufferedReader(fr);
23 
24                 FileWriter fw = new FileWriter(newF);
25                 PrintWriter pw = new PrintWriter(fw);) {
26             while (true) {
27                 String line = br.readLine();
28                 if (line == null)
29                     break;
30                 line = line.replace("@class@", className);
31                 line = line.replace("@type@", attributeClass);
32                 line = line.replace("@property@", attributeName);
33                 line = line.replace("@Uproperty@", upAttributeName);
34                 pw.println(line);
35             }
36         } catch (IOException e) {
37             // TODO Auto-generated catch block
38             e.printStackTrace();
39         }
40     }
41 
42     public static void main(String[] args) {
43         String className = null;
44         String attributeClass = null;
45         String attributeName = "";
46 
47         Scanner s1 = new Scanner(System.in);
48         System.out.println("请输入类的名称:");
49         className = s1.nextLine();
50         System.out.println("请输入属性的类型:");
51         attributeClass = s1.nextLine();
52         System.out.println("请输入属性的名称:");
53         attributeName = s1.nextLine();
54 
55         // 进行替换
56         func(className, attributeClass, attributeName);
57 
58     }
59 }

3.复制文件夹

把源文件夹下所有的文件复制到目标文件夹下(包括子文件夹)

难点:怎么处理子文件夹->递归;怎么处理命名的问题

 1 package IOTest;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.File;
 5 import java.io.FileInputStream;
 6 import java.io.FileNotFoundException;
 7 import java.io.FileReader;
 8 import java.io.FileWriter;
 9 import java.io.IOException;
10 import java.io.PrintWriter;
11 
12 import javax.annotation.processing.Filer;
13 import javax.imageio.stream.FileImageOutputStream;
14 
15 public class test7 {
16     // 使用缓存流进行文件复制
17     public static void copyFile(String srcFile, String destFile) {
18         File f = new File(srcFile);
19         File newF = new File(destFile);
20 
21         try (FileReader fr = new FileReader(f);
22                 BufferedReader br = new BufferedReader(fr);
23                 FileWriter fw = new FileWriter(newF);
24                 PrintWriter pw = new PrintWriter(fw);) {
25             // 读一行,写一行
26             while (true) {
27                 String line = br.readLine();
28                 if (line == null)
29                     break;
30                 pw.println(line);
31             }
32         } catch (IOException e) {
33             // TODO Auto-generated catch block
34             e.printStackTrace();
35         }
36     }
37 
38     public static void copyFolder(String srcFolder, String destFolder) {
39         File f1 = new File(srcFolder);
40         File f2 = new File(destFolder);
41 
42         File[] fs = f1.listFiles();
43         for (File f : fs) {
44             //若f是文件夹,要先在destFolder先创建同名空文件夹,再递归调用copyFolder
45             if (f.isDirectory()) {
46                 File tmp = new File(destFolder + File.separator + f.getName());
47                 tmp.mkdirs();
48                 copyFolder(f.getAbsolutePath(), tmp.getAbsolutePath()); // 难点,递归
49             }
50             if (f.isFile()) {
51                 copyFile(f.getAbsolutePath(), destFolder + File.separator + f.getName());
52             }
53         }
54     }
55 
56     public static void main(String[] args) {
57         File f1 = new File("D:/test");
58         File f2 = new File("D:/test1");
59         // 把f1文件夹下的内容全部复制到f2文件夹下
60         copyFolder(f1.getAbsolutePath(), f2.getAbsolutePath());
61 
62     }
63 }

测试成功!

4.查找文件内容

遍历这个目录下所有的java文件(包括子文件夹),找出文件内容包括 Magic的那些文件,并打印出来。

有了上面的经验,这题好做多了。

 1 package IOTest;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.File;
 5 import java.io.FileReader;
 6 import java.io.IOException;
 7 
 8 public class test8 {
 9     public static void func(String path){
10         File f=new File(path);
11         if(f.exists()){
12             File []fs=f.listFiles();
13             for(File x:fs){
14                 if(x.isDirectory()){
15                     func(x.getAbsolutePath());//也是递归
16                 }
17                 //对所有.java文件进行查找,打开每个文件查找字符串"Magic"是否在其中
18                 if(x.isFile() && x.getName().contains(".java")){
19                     try(
20                             FileReader fr=new FileReader(x);
21                             BufferedReader br=new BufferedReader(fr);
22                             )
23                     {
24                         while(true){
25                             String line=br.readLine();
26                             if(line==null)
27                                 break;
28                             if(line.contains("Magic")){
29                                 System.out.printf("找到目标字符串\"Magic\",在文件%s%n",x.getAbsoluteFile());
30                             }
31                         }
32                     } catch (IOException e) {
33                         // TODO Auto-generated catch block
34                         e.printStackTrace();
35                     }                    
36                 }
37             }
38         }
39     }
40     public static void main(String[] args) {
41         String path="F:\\project\\javastudy";
42         func(path);
43     }
44 }

效果图:

posted @ 2020-01-14 20:36  细雨轻风  阅读(808)  评论(0编辑  收藏  举报