Scala IO总结
归纳下Scala的io,Scala创建了两个类用于io。
- Console(用于标准输入输出)
- StdIn(用于标准输入)
- Source(用于文件输入,输出得用java的api)
- 文件输出(Scala中没有专门的文件输出,需要使用Java的类)
- 相对路径
- 题外话:怎么在打包后获得jar包里的资源
Console
Console是对System.out
、System.in
和System.err
的一层封装。
在scala.Predef中有许多方便的调用,所以才可以用print,println等函数
object Demo {
def main(args:Array[String]): Unit ={
println("Hello World")
}
}
Console中也有用来从控制台读取的API,不过在Scala2.11后的版本后已废弃,改用StdIn来代替。
StdIn
StdIn是Console类中标准输入的引用
import scala.io.StdIn
object Demo {
def main(args: Array[String]): Unit = {
val a = StdIn.readLine("请输入:")
println("输出为" + a)
}
}
Source
Source是对java.io.File的一层封装
常用的方法有
- fromFile
- fromURI
import scala.io.Source
object Demo {
def main(args: Array[String]): Unit = {
println(Source.fromFile("pom.xml").mkString)
}
}
相对路径
相对路径以jvm环境变量中的user.dir
为根目录
在Scala中启动Scala的路径即为user.dir
的值。
在IDEA中user.dir
的值为项目的根目录下面
题外话:怎么在打包后获得jar包里的资源
使用类名.class.getClassLoader().getResource()
以log4j为例,获取包中的META-INF/MANIFEST.MF
import org.slf4j.Logger;
import java.io.IOException;
public class CUtil{
public static void main(String[] args) throws IOException {
System.out.println(Logger.class.getClassLoader().getResource("META-INF/MANIFEST.MF").getFile());
System.out.println(Logger.class.getClassLoader().getResourceAsStream("META-INF/MANIFEST.MF").read());;
}
}