有一个日志文件log.txt,每行一条,前面是固定长度的时间,后面是日志级别和日志内容,如:
20160801 09:40:24 INFO aaaaaaaaaaaa
20160801 09:40:25 WARNING bbbbbbbbbbbbbbbbbbbb
20160801 09:41:10 ERROR cccccccccccc
20160801 09:43:24 INFO ddddddd
20160801 09:45:01 ERROR eeeeeeeeeee
请写段代码把级别为ERROR的行(除去 ERROR)输出到error.txt,如:
20160801 09:41:10 cccccccccccc
20160801 09:45:01 eeeeeeeeeee
这个是一个简单的I/O流对文本的操作,只要熟悉I/O的基本操作应该就可以编写出来。
方法一:
1.我首先想到的是使用BufferedReader对log.txt文件进行整行读取,这是我使用BufferedReader最主要的原因;
2.判断是否整行不为空;
3. 使用String类中的indexOf方法若得到"ERROR"首地址位置则进行下面操作 否则退到步骤2 读取下一行;
4.通过BufferedWriter进行对error.txt写操作;
5.使用String类substring方法从包含"ERROR"改行的地址0写到 步骤2所得到的首地址位置 加上 从步骤2得到的首地址位置+5(ERROR5个偏移量)写到尾;
代码实现:
1 import java.io.BufferedReader; 2 import java.io.BufferedWriter; 3 import java.io.FileInputStream; 4 import java.io.FileNotFoundException; 5 import java.io.FileReader; 6 import java.io.FileWriter; 7 import java.io.IOException; 8 import java.io.PrintWriter; 9 10 public class Error { 11 12 /** 13 * @param args 14 * @throws IOException 15 */ 16 public static void main(String[] args) { 17 // TODO Auto-generated method stub 18 try { 19 BufferedReader br = new BufferedReader(new FileReader("src/Test/log.txt")); 20 BufferedWriter bw = new BufferedWriter(new FileWriter("src/Test/Error.txt")); 21 int startValue = 0; 22 String str = null; 23 while((str = br.readLine()) != null){ 24 if ((startValue = str.indexOf("ERROR")) > 0){ 25 bw.write((str.substring(0, startValue) 26 + str.substring(startValue + 5, str.length()))); 27 bw.newLine(); 28 bw.flush(); 29 } 30 } 31 br.close(); 32 bw.close(); 33 34 } catch (IOException e) { 35 // TODO Auto-generated catch block 36 e.printStackTrace(); 37 } 38 } 39 40 }
方法二:
前面步骤是一样的,从第三部开始变化:
3.使用String类中的contains方法判断是否该行是否包含"ERROE",若包含则进行下面步骤操作否则继续判断;
4.使用replace方法将ERROR替代为空字符;
5.使用BufferedWriter将信息写到error.txt文本中。
代码实现:
1 import java.io.BufferedReader; 2 import java.io.BufferedWriter; 3 import java.io.FileInputStream; 4 import java.io.FileNotFoundException; 5 import java.io.FileReader; 6 import java.io.FileWriter; 7 import java.io.IOException; 8 import java.io.PrintWriter; 9 10 public class Error { 11 12 /** 13 * @param args 14 * @throws IOException 15 */ 16 public static void main(String[] args) { 17 // TODO Auto-generated method stub 18 try { 19 BufferedReader br = new BufferedReader(new FileReader("src/Test/log.txt")); 20 BufferedWriter bw = new BufferedWriter(new FileWriter("src/Test/Error.txt")); 21 int startValue = 0; 22 String str = null; 23 while((str = br.readLine()) != null){ 24 if(str.contains("ERROR")){ 25 str = str.replace(" ERROR", ""); 26 bw.write(str); 27 bw.newLine(); 28 bw.flush(); 29 } 30 } 31 br.close(); 32 bw.close(); 33 34 } catch (IOException e) { 35 // TODO Auto-generated catch block 36 e.printStackTrace(); 37 } 38 } 39 40 }
现在慢慢学会对学习东西进行一些基本的整理,以便它日需要用能够顺手找到,这样也锻炼一下自己的叙说能力,能不能将问题的基本逻辑讲清楚。总之这感觉不错哦。
这个一道XXX公司的一道编程笔试题!去年留下来准备,今年要进行找工作了!用来练练手O(∩_∩)O~