[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.그들이 자바처럼 스칼라의 자원 정확히 작동합니다. 그것은 자바 모범 사례를 따라 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.12, 사용 Source.fromResource :
스칼라의 경우> = 2.12, 사용 Source.fromResource :
scala.io.Source.fromResource("located_in_resouces.any")
-
==============================
3.
val source_html = Source.fromResource("file.html").mkString
-
==============================
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.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.필요한 파일은 스칼라에서 자원 폴더에서 다음과 같이 액세스 할 수 있습니다
필요한 파일은 스칼라에서 자원 폴더에서 다음과 같이 액세스 할 수 있습니다
val file = scala.io.Source.fromFile(s"src/main/resources/app.config").getLines().mkString
from https://stackoverflow.com/questions/27360977/how-to-read-files-from-resources-folder-in-scala by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 포스트 그레스 표에 Dataframes UPSERT 불꽃 (0) | 2019.11.14 |
---|---|
[SCALA] 스칼라 파일에서 jar 파일 만들기 (0) | 2019.11.14 |
[SCALA] Scalaz 상태 모나드 예 (0) | 2019.11.14 |
[SCALA] 스칼라 기능적 대하여 반응성 프로그래밍 [폐쇄] (0) | 2019.11.14 |
[SCALA] 스칼라 튜플 풀고 (0) | 2019.11.14 |