Scala(Java)动态切换工作目录

与世无争的帅哥 提交于 2020-03-12 19:50:16

1、pom文件新增依赖

 <dependency>
  <groupId>com.github.jnr</groupId>
  <artifactId>jnr-posix</artifactId>
  <version>3.0.1</version>
</dependency>

2、通过POSIXFactory实现工作路径切换

package com.stargraph

import jnr.posix.POSIXFactory

import scala.io.Source

/**
  * Created by zhoujiamu on 2019/7/26.
  */
object Test {

  def main(args: Array[String]): Unit = {

    POSIXFactory.getPOSIX().chdir("/Users/stargraph/workspace/fork/NlpApi")     // /Users/stargraph/workspace/fork/NlpApi 是需要切换的路径

    Source.fromFile("run.sh").getLines().foreach(println)

  }
}

上述切换工作目录只在当前的类生效,在其他类不生效,例如下面new HZNLP()时,HZNLP在实例化时候会读取文件,此时还是会出现找不到

object Test {

  def main(args: Array[String]): Unit = {

    POSIXFactory.getPOSIX.chdir("/Users/stargraph/workspace/fork/NlpApi/lalala")

    val nlp = new HZNLP("conf/NLPProcess.properties")

    println(nlp.segJson("我爱自然语言处理"))

  }
}
Exception in thread "main" java.io.FileNotFoundException: /Users/stargraph/workspace/fork/NlpApi/conf/Preprocess.properties (No such file or directory)
	at java.io.FileInputStream.open0(Native Method)
	at java.io.FileInputStream.open(FileInputStream.java:195)
	at java.io.FileInputStream.<init>(FileInputStream.java:138)
	at java.io.FileInputStream.<init>(FileInputStream.java:93)
	at com.haizhi.nlp.Preprocess.init(Preprocess.scala:30)
	at com.haizhi.nlp.Preprocess$.getInstance(Preprocess.scala:195)
	at com.haizhi.nlp.HZNLP.<init>(HZNLP.scala:47)
	at com.stargraph.Test$.main(Test.scala:23)
	at com.stargraph.Test.main(Test.scala)

为了使得切换后对其他类生效,则需要再设置系统的user.dir

object Test {

  def main(args: Array[String]): Unit = {
  
    System.setProperty("user.dir", "/Users/stargraph/workspace/fork/NlpApi/lalala")

    POSIXFactory.getPOSIX.chdir("/Users/stargraph/workspace/fork/NlpApi/lalala")

    val nlp = new HZNLP("conf/NLPProcess.properties")

    println(nlp.segJson("我爱自然语言处理"))

  }
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!