美文网首页工作小记
IO流小练习-System.in输入类名自动创建类

IO流小练习-System.in输入类名自动创建类

作者: 叫子非鱼啊 | 来源:发表于2020-05-28 20:53 被阅读0次

练习要求:

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

实现效果

模板内容

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

java实现方法

思路:

  • 通过System.in读取字符串 赋值给相应的字段
  • BufferedReader 读取模板每行的数据
  • 用StringBuffer拼接
  • 替换@***@为console中输入的对应的字段
  • BufferedWriter 写入到新的java文件中
package iotest;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;

/**
 * 自动创建有一个属性的类文件。
 * 通过控制台,获取类名,属性名称,属性类型,根据一个模板文件,
 * 自动创建这个类文件,并且为属性提供setter和getter
 * @author lxh96
 *
 */
public class TestStream {
    public static String className;
    public static String propertyName;
    public static String propertyType;
    public static String propertyUpper;
    
    public static void main(String[] args) {
        
        // 通过System.in读取字符串  赋值给相应的字段
        Scanner s = new Scanner(System.in);
        System.out.println("请输入类名:");
        className = s.nextLine();
        System.out.println("请输入属性名称");
        propertyName = s.nextLine();
        System.out.println("请输入属性类型");
        propertyType = s.nextLine();
        // 将属性首字母大写,用作替换getter和setter方法名
        propertyUpper = propertyName.substring(0,1).toUpperCase()+propertyName.substring(1);
        
        
        File f = new File("E:\\temp\\template.txt"); // 模板文件对象
        File f2 = new File("E:\\temp\\"+className+".java"); // 生成文件路径对象
        
        
        try(
                BufferedReader br = new BufferedReader(new FileReader(f));
                BufferedWriter bw = new BufferedWriter(new FileWriter(f2));
        ){
            StringBuffer sb = new StringBuffer();
            while (true) {
                String line = br.readLine(); // 读取模板每行的数据
                if (line == null) {
                    break;
                }
                sb.append(replace(line)+"\n"); // 用console输入的关键词替换模板中的关键字 并拼接
            }
            System.out.println(sb);  
            bw.write(sb.toString());  // 输出到新的文件中
        } catch (IOException e) {
            e.printStackTrace();
        }
        
    }

    /**
     * 替换模板中的关键字
     * @param line
     * @return
     */
    private static String replace(String line) {
        return line.replace("@class@", className).replace("@type@", propertyType)
                .replace("@property@", propertyName).replace("@Uproperty@", propertyUpper);
    }

}

相关文章

  • IO流小练习-System.in输入类名自动创建类

    练习要求: 自动创建有一个属性的类文件。通过控制台,获取类名,属性名称,属性类型,根据一个模板文件,自动创建这个类...

  • C++IO和文件操作

    文件 标准的输入输出设备名有哪些? 文件输入类的类名是? Iostream 流 原理 cout是流的对象,它在io...

  • 结构型 装饰器模式(文末有项目连接)

    1:从IO引入(奇怪的IO类) 字节流字符流输入流InputStreamReader输出流OutputStream...

  • Java_IO流及IO流在网络编程中的应用

    IO流 (抽象基类)字节流字符流输入流InputStreamReader输出流OutputStreamWriter...

  • 从IO中学习装饰器模式

    最近在重学IO,我们在创建输入输出流的时候总会在构造函数中嵌套很多类,比如:BufferedReader in =...

  • Java IO流

    Java IO流 都定义在java.io包中,定义了多个流类型(类或 抽象类)来实现输入/输出功能;可以从不同角度...

  • Java学习总结之Java IO系统

    概述 Java.io 包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。Java.io ...

  • Java基础09-IO流

    概述 Java.io 包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。Java.io ...

  • Java基础之IO流

    ##Java基础之IO流IO流常用几个类的关系如下: 字节流 字节输入流FileInputStream 读取文件用...

  • IO流相关

    Java.IO 包中定义了多个流类型 (类和抽象类) 来实现输入\输出功能,按数据流的方向不同可以分为输入和输出流...

网友评论

    本文标题:IO流小练习-System.in输入类名自动创建类

    本文链接:https://www.haomeiwen.com/subject/wggaahtx.html