how2j.cn


工具版本兼容问题
System.out 是常用的在控制台输出数据的
System.in 可以从控制台输入数据

本视频是解读性视频,所以希望您已经看过了本知识点的内容,并且编写了相应的代码之后,带着疑问来观看,这样收获才多。 不建议一开始就观看视频



4分36秒
本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)



步骤 1 : System.in   
步骤 2 : Scanner读取字符串   
步骤 3 : Scanner从控制台读取整数   
步骤 4 : 练习-自动创建类   
步骤 5 : 答案-自动创建类   

步骤 1 :

System.in

package stream; import java.io.IOException; import java.io.InputStream; public class TestStream { public static void main(String[] args) { // 控制台输入 try (InputStream is = System.in;) { while (true) { // 敲入a,然后敲回车可以看到 // 97 13 10 // 97是a的ASCII码 // 13 10分别对应回车换行 int i = is.read(); System.out.println(i); } } catch (IOException e) { e.printStackTrace(); } } }
步骤 2 :

Scanner读取字符串

使用System.in.read虽然可以读取数据,但是很不方便
使用Scanner就可以逐行读取了
package stream; import java.util.Scanner; public class TestStream { public static void main(String[] args) { Scanner s = new Scanner(System.in); while(true){ String line = s.nextLine(); System.out.println(line); } } }
package stream;
   
import java.util.Scanner;
   
public class TestStream {
   
    public static void main(String[] args) {
        
        	Scanner s = new Scanner(System.in);
        	
        	while(true){
	        	String line = s.nextLine();
	        	System.out.println(line);
        	}
        
    }
}
步骤 3 :

Scanner从控制台读取整数

使用Scanner从控制台读取整数
Scanner从控制台读取整数
package stream; import java.util.Scanner; public class TestStream { public static void main(String[] args) { Scanner s = new Scanner(System.in); int a = s.nextInt(); System.out.println("第一个整数:"+a); int b = s.nextInt(); System.out.println("第二个整数:"+b); } }
package stream;

import java.util.Scanner;

public class TestStream {
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		int a = s.nextInt();
		System.out.println("第一个整数:"+a);
		int b = s.nextInt();
		System.out.println("第二个整数:"+b);
	}
}
步骤 4 :

练习-自动创建类

Or  姿势不对,事倍功半! 点击查看做练习的正确姿势
自动创建有一个属性的类文件。
通过控制台,获取类名,属性名称,属性类型,根据一个模板文件,自动创建这个类文件,并且为属性提供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@; } }
public class @class@ {
    public @type@ @property@;
    public @class@() {
    }
    public void set@Uproperty@(@type@  @property@){
        this.@property@ = @property@;
    }
     
    public @type@  get@Uproperty@(){
        return this.@property@;
    }
}
步骤 5 :

答案-自动创建类

在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

5分27秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)


package stream; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.Scanner; public class TestStream { public static void main(String[] args) { // 接受客户输入 Scanner s = new Scanner(System.in); System.out.println("请输入类的名称:"); String className = s.nextLine(); System.out.println("请输入属性的类型:"); String type = s.nextLine(); System.out.println("请输入属性的名称:"); String property = s.nextLine(); String Uproperty = toUpperFirstLetter(property); // 读取模版文件 File modelFile = new File("E:\\project\\j2se\\src\\Model.txt"); String modelContent = null; try (FileReader fr = new FileReader(modelFile)) { char cs[] = new char[(int) modelFile.length()]; fr.read(cs); modelContent = new String(cs); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } //替换 String fileContent = modelContent.replaceAll("@class@", className); fileContent = fileContent.replaceAll("@type@", type); fileContent = fileContent.replaceAll("@property@", property); fileContent = fileContent.replaceAll("@Uproperty@", Uproperty); String fileName = className+".java"; //替换后的内容 System.out.println("替换后的内容:"); System.out.println(fileContent); File file = new File("E:\\project\\j2se\\src",fileName); try(FileWriter fw =new FileWriter(file);){ fw.write(fileContent); } catch (IOException e) { e.printStackTrace(); } System.out.println("文件保存在:" + file.getAbsolutePath()); } public static String toUpperFirstLetter(String str){ char upperCaseFirst =Character.toUpperCase(str.charAt(0)); String rest = str.substring(1); return upperCaseFirst + rest; } }


HOW2J公众号,关注后实时获知布最新的教程和优惠活动,谢谢。


问答区域    
2018-03-30 只有@property@可以被替换,其他没有被替换,求解?
GinWang



生成的结果中,只有@property@被正确替换了,其他没有变化。请问这是什么原因?
package com.Stream;

import java.io.*;
import java.util.Scanner;

public class CreateClassAuto {
    

    public static void main(String args[]){
        Scanner s = new Scanner(System.in);
        System.out.println("请输入类名:");
        String classname = s.nextLine();
        System.out.println("请输入属性类型:");
        String chaclass = s.nextLine();
        System.out.println("请输入属性名");
        String chaname = s.nextLine();

        File f = new File("E:/replace.java");
        String currentContent = null;
        try(FileReader fr = new FileReader(f);
            ){
            char[] c = new char[(int)f.length()];
            fr.read(c);
            currentContent = new String(c);
            System.out.println("修改前:"+currentContent);
        }catch (Exception e){
            e.printStackTrace();
        }

        //替换目标词语
        String fileContent = currentContent.replaceAll("@class@",classname);
        fileContent = currentContent.replaceAll("@type@",chaclass);
        fileContent = currentContent.replaceAll("@property@",chaname);

        System.out.println("@class@被"+classname+"替换了");
        System.out.println("@type@被"+chaclass+"替换了");
        System.out.println("@property@被"+chaname+"替换了");
        System.out.println("修改后FileContent:"+fileContent);
//        System.out.println("修改后currentContent:"+currentContent);
        String fileName = classname+".java";
        //输出替换后的文件
        File newFile = new File(fileName);
        try(FileWriter fw = new FileWriter(newFile)){
            fw.write(fileContent);
        }catch (IOException e){
            e.printStackTrace();
        }
        System.out.println("文件保存路径为:"+newFile.getAbsolutePath());
    }
}

							






答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2018-02-24 很不解为什么无法替换字符串
mercielago



用缓存流读出后赋值给String类型变量line 使用replaceAll方法替换line中的字符却不成功 PS:自创建了一个测试类发现字符串可以使用replaceAll方法正常替换
package file;

import java.io.*;
import java.util.Scanner;

public class createClass {

    public static void main(String[] args) {
        File f = new File("src/testFile/autoClass.txt");
        File f1 = new File("src/testFile/instClass.txt");
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入类名");
        String cls = sc.next();
        System.out.println("请输入属性类型");
        String ptype = sc.next();
        System.out.println("请输入属性名");
        String pname = sc.next();
        try(
                FileReader fr = new FileReader(f);
                BufferedReader br = new BufferedReader(fr);
                FileWriter fos = new FileWriter(f1);
                BufferedWriter bw = new BufferedWriter(fos);
                ){
            System.out.println("开始转化...");
            while(true){
                String line = br.readLine();    //使用缓存流读取每行
                if (null==line)
                    break;
               // 替换字符串
                line.replaceAll("@class@", cls);
                line.replaceAll("@type@", ptype);
                line.replaceAll("@property@", pname);
                System.out.println(line);        //此处发现没有替换
                 // 写入文件
//                bw.write(line);
            }
            System.out.println("转化完毕");

        }catch (IOException e){
            e.printStackTrace();
        }
    }
}

							


2 个答案

eco 答案时间:2018-03-03
replaceAll返回String类型. 返回替换后的字符串

eco 答案时间:2018-03-03
replaceAll 返回String ... 你咋和我犯一样的毛病啊~~~ 哈哈




答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2017-11-21 用scanner读取整数后再读取字符串
2017-05-15 文件不出现在Eclipse中
2017-02-16 练习答案48行




提问之前请登陆
关于 JAVA 中级-I/O-System.in 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 620943819
站长会在每个工作日早上尽量回答提问(如果有漏掉没有回答的,请进群提醒一下)
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
站长是玻璃心,提问的时候请语气温柔些 kiss~
截止2017-5-19日累计提问 1638个,站长回答了 1546个
截止2017-8-15日累计提问 2788个,站长回答了 2544个

上传截图