복붙노트

[SCALA] 자원 스칼라 폴더에서 어떻게 파일을 읽을?

SCALA

자원 스칼라 폴더에서 어떻게 파일을 읽을?

나는 다음과 같은 폴더 구조를 가지고 :

- main
-- java
-- resources 
-- scalaresources
--- commandFiles 

그 폴더에 읽었해야한다는 내 파일이 있습니다. 여기에 코드입니다 :

def readData(runtype: String, snmphost: String, comstring: String, specificType:  String): Unit = {
  val realOrInvFile = "/commandFiles/snmpcmds." +runtype.trim // these files are under commandFiles folder, which I have to read. 
    try {
      if (specificType.equalsIgnoreCase("Cisco")) {
        val specificDeviceFile: String = "/commandFiles/snmpcmds."+runtype.trim+ ".cisco"
        val realOrInvCmdsList = scala.io.Source.fromFile(realOrInvFile).getLines().toList.filterNot(line => line.startsWith("#")).map{
          //some code 
        }
        val specificCmdsList = scala.io.Source.fromFile(specificDeviceFile).getLines().toList.filterNot(line => line.startsWith("#")).map{
          //some code
        }
      }
    } catch {
      case e: Exception => e.printStackTrace
    }
  }
}

해결법

  1. ==============================

    1.그들이 자바처럼 스칼라의 자원 정확히 작동합니다. 그것은 자바 모범 사례를 따라 SRC / 메인 / 자원과 SRC / 테스트 / 자원의 모든 자원을 넣어하는 것이 가장 좋습니다.

    그들이 자바처럼 스칼라의 자원 정확히 작동합니다. 그것은 자바 모범 사례를 따라 SRC / 메인 / 자원과 SRC / 테스트 / 자원의 모든 자원을 넣어하는 것이 가장 좋습니다.

    예 폴더 구조 :

    testing_styles/
    ├── build.sbt
    ├── src
    │   └── main
    │       ├── resources
    │       │   └── readme.txt
    

    자원에게 소스는 방법 fromResource를 제공하는 객체를 읽을 수 있습니다.

    import scala.io.Source
    val readmeText : Iterator[String] = Source.fromResource("readme.txt").getLines
    

    자원을 읽으려면 당신은 getClass.getResource 및 getClass.getResourceAsStream를 사용할 수 있습니다.

    val stream: InputStream = getClass.getResourceAsStream("/readme.txt")
    val lines: Iterator[String] = scala.io.Source.fromInputStream( stream ).getLines
    

    undebuggable 자바 NPEs을 방지하기 위해, 고려 :

    import scala.util.Try
    import scala.io.Source
    import java.io.FileNotFoundException
    
    object Example {
    
      def readResourceWithNiceError(resourcePath: String): Try[Iterator[String]] = 
        Try(Source.fromResource(resourcePath).getLines)
          .recover(throw new FileNotFoundException(resourcePath))
     }
    

    자원은 종종이 문제가 발생할 수있는 파일을 생성하는 데 사용되는 URL을 반환하는 항아리의 getResource의 일부입니다 때 같이 getResourceAsStream도 잘 작동 있음을 유의하십시오.

    프로덕션 코드에서 나는 소스가 다시 닫혀 있는지 확인하는 것이 좋습니다.

  2. ==============================

    2.스칼라의 경우> = 2.12, 사용 Source.fromResource :

    스칼라의 경우> = 2.12, 사용 Source.fromResource :

    scala.io.Source.fromResource("located_in_resouces.any")
    
  3. ==============================

    3.

    val source_html = Source.fromResource("file.html").mkString
    
  4. ==============================

    4.

    import scala.io.Source
    
    object Demo {
    
      def main(args: Array[String]): Unit = {
    
        val fileStream = getClass.getResourceAsStream("/json-sample.js")
        val lines = Source.fromInputStream(fileStream).getLines
        lines.foreach(line => println(line))
    
      }
    
    }
    

    편집 : 원래 작성자에게 감사드립니다. 여기에 전체 블로그를 참조하십시오

  5. ==============================

    5.getLines 정확히하지 않을 경우 스칼라 2.11를 들어, 당신은 또한 로컬 파일 시스템에 항아리 밖으로 파일을 복사 할 수 있습니다 원하는.

    getLines 정확히하지 않을 경우 스칼라 2.11를 들어, 당신은 또한 로컬 파일 시스템에 항아리 밖으로 파일을 복사 할 수 있습니다 원하는.

    여기 / 자원에서 진 구글 .P12 형식의 API 키를 읽는 SNIPPIT이야, 그것은 / tmp를하고 쓰기 스파크 구글 스프레드 시트의 입력으로 파일 경로 문자열을 사용하는 기록합니다.

    SBT-네이티브 포장 업체와의 세계에서 SBT 조립, 지역에 복사하면 scalatest 이진 파일 테스트에 유용합니다. 다만, 지역 자원의 그들을 팝업 테스트를 실행 한 다음 삭제합니다.

    import java.io.{File, FileOutputStream}
    import java.nio.file.{Files, Paths}
    
    def resourceToLocal(resourcePath: String) = {
      val outPath = "/tmp/" + resourcePath
      if (!Files.exists(Paths.get(outPath))) {
        val resourceFileStream = getClass.getResourceAsStream(s"/${resourcePath}")
        val fos = new FileOutputStream(outPath)
        fos.write(
          Stream.continually(resourceFileStream.read).takeWhile(-1 !=).map(_.toByte).toArray
        )
        fos.close()
      }
      outPath
    }
    
    val filePathFromResourcesDirectory = "google-docs-key.p12"
    val serviceAccountId = "[something]@drive-integration-[something].iam.gserviceaccount.com"
    val googleSheetId = "1nC8Y3a8cvtXhhrpZCNAsP4MBHRm5Uee4xX-rCW3CW_4"
    val tabName = "Favorite Cities"
    
    import spark.implicits
    val df = Seq(("Brooklyn", "New York"), 
              ("New York City", "New York"), 
              ("San Francisco", "California")).
              toDF("City", "State")
    
    df.write.
      format("com.github.potix2.spark.google.spreadsheets").
      option("serviceAccountId", serviceAccountId).
      option("credentialPath", resourceToLocal(filePathFromResourcesDirectory)).
      save(s"${googleSheetId}/${tabName}")
    
  6. ==============================

    6.필요한 파일은 스칼라에서 자원 폴더에서 다음과 같이 액세스 할 수 있습니다

    필요한 파일은 스칼라에서 자원 폴더에서 다음과 같이 액세스 할 수 있습니다

    val file = scala.io.Source.fromFile(s"src/main/resources/app.config").getLines().mkString
    
  7. from https://stackoverflow.com/questions/27360977/how-to-read-files-from-resources-folder-in-scala by cc-by-sa and MIT license