《JAVA实验5 流(仅供借鉴)》由会员分享,可在线阅读,更多相关《JAVA实验5 流(仅供借鉴)(14页珍藏版)》请在金锄头文库上搜索。
1、实验5 流1. 编写程序,要求:用户在键盘每输入一行文本,程序将这段文本显示在控制台中。当用户输入的一行文本是“exit”(不区分大小写)时,程序将用户所有输入的文本都写入到文件log.txt中,并退出。(要求:控制台输入通过流封装System.in获取,不要使用Scanner)package shiyanwu1;import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; public class test1 / 获得系统换行符 private static final
2、 String LINE_SEP = System.getProperty(line.separator); public static void main(String args) throws Exception try (BufferedReader in = new BufferedReader( new InputStreamReader(System.in) String line; StringBuilder sBuilder = new StringBuilder(); while (true) line = in.readLine(); / 读入一行字符串 if (line
3、= null | exit.equals(line)|EXIT.equals(line) break; sBuilder.append(line).append(LINE_SEP); / 将 sBuilder 中的数据写入 log.txt try (PrintWriter writer = new PrintWriter(D:/java examples/my java/src/shiyanwu1/show.txt) writer.print(sBuilder.toString(); 2. 查看File类的API文档,使用该类实现一个类FileList,它提供两个静态方法:1)printCon
4、tentsInOneDirectory:能够将输入参数path所指定的本地磁盘路径下的所有目录和文件的名称(指明是目录还是文件,格式见下图)打印出来;2)readFileAndDirectory:能够将输入参数path所指定的本地磁盘路径下的所有目录(包含子目录)和文件的名称(指明是目录还是文件,格式见下图)以层次化结构打印出来。例如,某个目录下面有子目录a和文件Teacher.class,目录a下面有子目录b(下面有文件Teacher.java)和c(下面有文件Test.java和Test.class)以及文件1.txt,将该目录对应的路径作为输入参数调用该方法,程序的输出如下图所示。pac
5、kage shiyanwu2;import java.io.File; public class test2 Public static void printContentsInOneDirectory(String path) File file = new File(path); if (!file.exists() throw new RuntimeException(String.format(文件 %s 不存在!, path); File childFiles = file.listFiles(); for (File childFile : childFiles) if (chil
6、dFile.isFile() System.out.format(文件 %sn, childFile.getName(); else System.out.format(目录 %sn, childFile.getName(); /* * * param path 目录路径 * param indent 当前缩进(即输出 - ) 的个数 */ public static void readFileAndDirectory(String path, int indent) File file = new File(path); if (!file.exists() throw new Runtim
7、eException(String.format(文件 %s 不存在!, path); File childFiles = file.listFiles(); for (File childFile : childFiles) for (int i = 0; i indent; +i) System.out.print(-); if (childFile.isFile() System.out.format(文件 %sn, childFile.getName(); else System.out.format(目录 %sn, childFile.getName(); readFileAndDi
8、rectory(childFile.getAbsolutePath(), indent + 2); public static void main(String args) throws Exception System.out.println(测试 printContentsInOneDirectory 方法:); printContentsInOneDirectory(some_dir); System.out.println(n测试 readFileAndDirectory 方法:); readFileAndDirectory(some_dir, 0); 3. 假设某个餐馆平时使用:1)
9、文本文件(orders.txt)记录顾客的点菜信息,每桌顾客的点菜记录占一行。每行顾客点菜信息的记录格式是“菜名:数量,菜名:数量,菜名:数量”。例如:“烤鸭:1,土豆丝:2,烤鱼:1”。2)文本文件(dishes.txt)记录每种菜的具体价格,每种菜及其价格占一行,记录格式为“菜名:价格“。例如:“烤鸭:169”。编写一个程序,能够计算出orders.txt中所有顾客消费的总价格。package shiyanwu3;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import j
10、ava.io.InputStream;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class order public static void main(String args) order first = new order();List orderDatas = first.readFile(D:/java examples/my java/src/shiyanwu3
11、/orders.txt);List dishesDatas = first.readFile(D:/java examples/my java/src/shiyanwu3/dishes.txt);Map orderDetail = first.resolveOrderDatas(orderDatas);Map dishesDetail = firs.resolveOrderDatas(dishesDatas);String dishesName = null;int dishesCount = 0;int totalPrice = 0;for (Map.Entry e : orderDetai
12、l.entrySet() dishesName = e.getKey();dishesCount = e.getValue();totalPrice += dishesDetail.get(dishesName) * dishesCount;System.err.println(dishesName+总消费为:+totalPrice);private List readFile(String fileName) if (fileName != null & !.equals(fileName) File file = null;file = new File(fileName);if (file.exists() List datas = new ArrayListStrin