【面试题】输入并保存文件,完成后退出显示文件内容

一个面试题的整理: 使用输入/输出编写一个程序,让用户输入一些姓名和电话号码。每一个 姓名和电话号码将加在文件里。用户通过输入“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上级目录下(一般就是项目名文件夹)

posted @ 2018-02-22 16:32  东北小狐狸  阅读(461)  评论(0编辑  收藏  举报