一、写一个简单的java读写方法
操作文件准备
创建test.txt文本文件
文件内容如下:
001 zhangsan male
002 lisi female
java代码操作读写过程
注:每一步解释在代码中注释
import java.io.*;
public class IO {
public static void main(String[] args) throws IOException {
//创建文件对象
File f=new File("D:\\project\\myscala\\src\\test.txt");
//随便造的字符串数据
String str="\n003 lyq male";
//调用写的方法
write(f,str,true);
//调用读的方法
read(f);
}
//写入方法
public static void write(File f,String str,Boolean append) throws IOException {
//创建写操作对象
FileWriter fw=new FileWriter(f,append);
//调用写入方法,括号中为写入内容
fw.write(str);
//关闭资源
fw.close();
}
public static void read(File f) throws IOException {
//创建读操作对象
FileReader fr=new FileReader(f);
//创建StringBuffer可变字符串
StringBuffer sb=new StringBuffer();
//创建临时整形数,用于数据类型转换
int tmp;
//循环读数据,并把读出的数据放入可变字符串中。
while((tmp=fr.read())!=-1){
sb.append((char) tmp);
}
//输出可变字符串
System.out.println(sb);
//关闭资源
fr.close();
}
}
二、scala集成java操作文件读写
使用scala操作java API对文件进行读写操作。
数据准备:
数据文件名:log.log
数据内容:
INFO 2016-07-25 requestURI:/c?app=0&p=1&did=18005472&industry=469&adid=31
INFO 2016-07-25 requestURI:/c?app=0&p=2&did=18005472&industry=469&adid=31
INFO 2016-07-25 requestURI:/c?app=0&p=1&did=18005472&industry=469&adid=32
scala代码演示
object IODemo extends App {
//输入输出流 IO
//java里面有 字符 字节输入输出
val filePath:String="src/log.log"
//使用java.io读取文件
val reader = new BufferedReader(new InputStreamReader(new FileInputStream(filePath),"GBK"))
println(reader.readLine())
}
三、用scala提取日志信息
注:具体思路见代码中注释。
object IODemo extends App {
//scala.io 下独有的读取文件方式 source
val file: BufferedSource = Source.fromFile(filePath)
// file.getLines().foreach(println)
// "INFO 2016-07-25 requestURI:/c?app=0&p=1&did=18005472&industry=469&adid=31"
//"ERROR"
// val regex: Regex = """([a-zA-Z]+) (\d\d\d\d-\d\d-\d\d) [^:]*:(.*)""".r
val regex: Regex = """(\w+) (\d{4}-\d{2}-\d{2}) [^:]*:(.*)""".r
//匹配获取相关内容,使用正则表达式,使用模式匹配
for(s <- file.getLines()){
s match {
case regex(level,date,uri)=>println(s"日志级别:${level},日期:${date},uri:${uri}")
case _ => println("匹配不到")
}
}
}