【面试题】输入并保存文件,完成后退出显示文件内容
一个面试题的整理: 使用输入/输出编写一个程序,让用户输入一些姓名和电话号码。每一个 姓名和电话号码将加在文件里。用户通过输入“done”来告诉系统整理列表已经输入完毕。如果用户输入完整列表,程序将创建一个输出文件 并显示或打印出来。格式如:555-1212,tom
代码:
1 import java.io.BufferedOutputStream; 2 import java.io.BufferedReader; 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileOutputStream; 6 import java.io.IOException; 7 import java.io.InputStreamReader; 8 import java.util.Scanner; 9 10 /** 11 * 一个面试题的整理: 使用输入/输出编写一个程序,让用户输入一些姓名和电话号码。每一个 姓名和电话号码将加在文件里。 12 * 用户通过输入“done”来告诉系统整理列表已经输入完毕。如果用户输入完整列表,程序将创建一个输出文件 并显示或打印出来。格式如:555-1212,tom 13 * 14 * @author hellxz 15 */ 16 public class TestInputOutputFile { 17 18 private static final String PAHT_NAME = "phone.txt";// 设置读取路径,这里使用相对路径 19 20 /** 21 * 输入并保存到文件 22 */ 23 public void input() { 24 String name = ""; // 名字 25 String phone = ""; // 手机号 26 @SuppressWarnings("resource") 27 Scanner scanner = new Scanner(System.in); // 新建扫描器 28 BufferedOutputStream buff = null; 29 FileOutputStream fos = null; 30 31 try { 32 fos = new FileOutputStream(new File(PAHT_NAME)); // 创建文件获取输出流 33 buff = new BufferedOutputStream(fos); // 缓冲输出流 34 35 while (true) { // 死循环 36 System.out.println("请输入名字,或输入done退出"); 37 name = scanner.nextLine(); 38 if (name.trim().equalsIgnoreCase("done")) // 输入done退出循环 39 break; 40 System.out.println("请输入手机号,或输入done退出"); 41 phone = scanner.nextLine(); 42 if (phone.trim().equalsIgnoreCase("done")) 43 break; 44 buff.write((phone + "," + name + "\n").getBytes("UTF-8")); // 设置字符编码,写入文件中 45 } 46 47 } catch (Exception e) { 48 e.printStackTrace(); 49 } finally { 50 // 关流 51 if (buff != null) 52 try { 53 buff.close(); 54 } catch (IOException e) { 55 e.printStackTrace(); 56 } 57 if(fos!=null) 58 try { 59 fos.close(); 60 }catch(IOException e) { 61 e.printStackTrace(); 62 } 63 } 64 } 65 66 /** 67 * 展示文件中内容 68 */ 69 public void display() { 70 71 InputStreamReader isr = null; 72 BufferedReader br = null; 73 try { 74 File file = new File(PAHT_NAME); //读取文件 75 isr = new InputStreamReader(new FileInputStream(file)); 76 br = new BufferedReader(isr); 77 //这里使用ready(),如果使用br.readLine()!=null来做判断的话,会出现丢掉首行文字或最后一行输出为null 78 //也尝试使用br.read()>0判断,发现会吞第一个字符……查api,发现了ready这个方法 79 while (br.ready()) { 80 System.out.println(br.readLine()); 81 } 82 } catch (Exception e) { //如果该文件不存在可能抛出FileNotFoundException这里简化了 83 e.printStackTrace(); 84 } finally { 85 //关流 86 if (br != null) { 87 try { 88 br.close(); 89 } catch (IOException e) { 90 e.printStackTrace(); 91 } 92 } 93 94 if (isr != null) { 95 try { 96 isr.close(); 97 } catch (IOException e) { 98 e.printStackTrace(); 99 } 100 } 101 } 102 } 103 104 public static void main(String[] args) { 105 TestInputOutputFile tiof = new TestInputOutputFile(); 106 tiof.input(); 107 tiof.display(); 108 } 109 }
测试输出:
请输入名字,或输入done退出 hellxz张 请输入手机号,或输入done退出 12345678 请输入名字,或输入done退出 Jane秦 请输入手机号,或输入done退出 87654321 请输入名字,或输入done退出 done 12345678,hellxz张 87654321,Jane秦
因为是相对路径,phone.txt这个文件会作为在src同级,位于src上级目录下(一般就是项目名文件夹)