Java从控制台读入数据的几种方法总结
程序员文章站
2024-03-13 11:09:57
这里记录java中从控制台读入信息的几种方式,已备后查!
(1)jdk 1.4(jdk 1.5和jdk 1.6也都兼容这种方法)
public class te...
这里记录java中从控制台读入信息的几种方式,已备后查!
(1)jdk 1.4(jdk 1.5和jdk 1.6也都兼容这种方法)
public class testconsole1 { public static void main(string[] args) { string str = readdatafromconsole("please input string:); system.out.println("the information from console: + str); } /** * use inputstreamreader and system.in to read data from console * * @param prompt * * @return input string */ private static string readdatafromconsole(string prompt) { bufferedreader br = new bufferedreader(new inputstreamreader(system.in)); string str = null; try { system.out.print(prompt); str = br.readline(); } catch (ioexception e) { e.printstacktrace(); } return str; } }
(2)jdk 1.5(利用scanner进行读取)
public class testconsole2 { public static void main(string[] args) { string str = readdatafromconsole("please input string:"); system.out.println("the information from console:" + str); } /** * use java.util.scanner to read data from console * * @param prompt * * @return input string */ private static string readdatafromconsole(string prompt) { scanner scanner = new scanner(system.in); system.out.print(prompt); return scanner.nextline(); } }
scanner还可以很方便的扫描文件,读取里面的信息并转换成你要的类型,比如对“2 2.2 3.3 3.33 4.5 done”这样的数据求和,见如下代码:
public class testconsole4 { public static void main(string[] args) throws ioexception { filewriter fw = new filewriter("num.txt"); fw.write("2 2.2 3.3 3.33 4.5 done"); fw.close(); system.out.println("sum is "+scanfileforsum("num.txt")); } public static double scanfileforsum(string filename) throws ioexception { double sum = 0.0; filereader fr = null; try { fr = new filereader(filename); scanner scanner = new scanner(fr); while (scanner.hasnext()) { if (scanner.hasnextdouble()) { sum = sum + scanner.nextdouble(); } else { string str = scanner.next(); if (str.equals("done")) { break; } else { throw new runtimeexception("file format is wrong!"); } } } } catch (filenotfoundexception e) { throw new runtimeexception("file " + filename + " not found!"); } finally { if (fr != null) fr.close(); } return sum; } }
(3)jdk 1.6(利用java.io.console进行读取)
jdk6中提供了java.io.console类专用来访问基于字符的控制台设备.
你的程序如果要与windows下的cmd或者linux下的terminal交互,就可以用console类代劳.(类似system.in和system.out)
但我们不总是能得到可用的console, 一个jvm是否有可用的console依赖于底层平台和jvm如何被调用.
如果jvm是在交互式命令行(比如windows的cmd)中启动的,并且输入输出没有重定向到另外的地方,那么就可以得到一个可用的console实例。
在使用 ide 的情况下,是无法获取到console实例的,原因在于在 ide 的环境下,重新定向了标准输入和输出流,也是就是将系统控制台上的输入输出重定向到了 ide 的控制台中
public class testconsole3 { public static void main(string[] args) { string str = readdatafromconsole("please input string:"); system.out.println("the information from console:" + str); } /** * use java.io.console to read data from console * * @param prompt * * @return input string */ private static string readdatafromconsole(string prompt) { console console = system.console(); if (console == null) { throw new illegalstateexception("console is not available!"); } return console.readline(prompt); } }
console类还有个特色就是,专门对密码(输入无回显)等安全字符,进行了处理。专门提供 readpassword()方法,具体应用见如下代码:
public class testconsole5 { public static void main(string[] args) { console console = system.console(); if (console == null) { throw new illegalstateexception("console is not available!"); } while(true){ string username = console.readline("username: "); char[] password = console.readpassword("password: "); if (username.equals("chris") && string.valueof(password).equals("gohead")) { console.printf("welcome to java application %1$s.\n", username); // 使用后应立即将数组清空,以减少其在内存中占用的时间,增强安全性 password = null; system.exit(-1); } else { console.printf("invalid username or password.\n"); } } } }
以上就是小编为大家带来的java从控制台读入数据的几种方法总结的全部内容了,希望对大家有所帮助,多多支持~