[SCALA] 스칼라 : 하나의 문에서 파일에 쓰기 문자열
SCALA스칼라 : 하나의 문에서 파일에 쓰기 문자열
스칼라에서 파일을 읽을 경우,이
Source.fromFile("file.txt").mkString
파일에 문자열을 쓸 수있는 동등한하고 간결한 방법이 있나요?
대부분의 언어는 그런 일을 지원합니다. 내가 제일 좋아하는 그루비입니다 :
def f = new File("file.txt")
// Read
def s = f.text
// Write
f.text = "file contents"
나는 한 줄의 코드의 짧은 페이지에 이르기까지 다양한 프로그램에 대한 코드를 사용하고 싶습니다. 여기에 이해가되지 않습니다 자신의 라이브러리를 사용하지. 나는 현대적인 언어가 나를 편리하게 파일에 뭔가를 쓸 수 있도록 기대합니다.
이 이와 유사한 게시물이 있지만, 그들은 내 정확한 질문에 대답하지 않는 이상 스칼라 버전에 초점을 맞추고있다.
예를 들면 :
해결법
-
==============================
1.간결한 하나의 라인 :
간결한 하나의 라인 :
import java.io.PrintWriter new PrintWriter("filename") { write("file contents"); close }
-
==============================
2.아무도 (자바 7부터 사용 가능) NIO.2 작업을 제안 없었다 이상한입니다 :
아무도 (자바 7부터 사용 가능) NIO.2 작업을 제안 없었다 이상한입니다 :
import java.nio.file.{Paths, Files} import java.nio.charset.StandardCharsets Files.write(Paths.get("file.txt"), "file contents".getBytes(StandardCharsets.UTF_8))
나는 이것이 지금까지 가장 간단하고 가장 쉽고 관용적 인 방법이라고 생각, 그것은 종속성 산세 자바 자체가 필요하지 않습니다.
-
==============================
3.여기에 간결한 한 줄 사용 reflect.io.file, 스칼라 2.12이 작품은 다음과 같습니다
여기에 간결한 한 줄 사용 reflect.io.file, 스칼라 2.12이 작품은 다음과 같습니다
reflect.io.File("filename").writeAll("hello world")
당신은 자바 라이브러리를 사용하려는 경우 또는이 해킹을 수행 할 수 있습니다 :
Some(new PrintWriter("filename")).foreach{p => p.write("hello world"); p.close}
-
==============================
4.당신 그루비 구문 같은 경우 스칼라에 가져 오기 위하여 포주 - 내 - 도서관 디자인 패턴을 사용할 수 있습니다 :
당신 그루비 구문 같은 경우 스칼라에 가져 오기 위하여 포주 - 내 - 도서관 디자인 패턴을 사용할 수 있습니다 :
import java.io._ import scala.io._ class RichFile( file: File ) { def text = Source.fromFile( file )(Codec.UTF8).mkString def text_=( s: String ) { val out = new PrintWriter( file , "UTF-8") try{ out.print( s ) } finally{ out.close } } } object RichFile { implicit def enrichFile( file: File ) = new RichFile( file ) }
예상대로 작동합니다 :
scala> import RichFile.enrichFile import RichFile.enrichFile scala> val f = new File("/tmp/example.txt") f: java.io.File = /tmp/example.txt scala> f.text = "hello world" scala> f.text res1: String = "hello world
-
==============================
5.
import sys.process._ "echo hello world" #> new java.io.File("/tmp/example.txt") !
-
==============================
6.마이크로 라이브러리 내가 쓴 : https://github.com/pathikrit/better-files
마이크로 라이브러리 내가 쓴 : https://github.com/pathikrit/better-files
file.write("Hi!")
또는
file << "Hi!"
-
==============================
7.당신은 쉽게 아파치 파일의 Utils를 사용할 수 있습니다. 기능 writeStringToFile 봐. 우리는 우리의 프로젝트에이 라이브러리를 사용합니다.
당신은 쉽게 아파치 파일의 Utils를 사용할 수 있습니다. 기능 writeStringToFile 봐. 우리는 우리의 프로젝트에이 라이브러리를 사용합니다.
-
==============================
8.이 간결에 충분한 것 같아요 :
이 간결에 충분한 것 같아요 :
scala> import java.io._ import java.io._ scala> val w = new BufferedWriter(new FileWriter("output.txt")) w: java.io.BufferedWriter = java.io.BufferedWriter@44ba4f scala> w.write("Alice\r\nBob\r\nCharlie\r\n") scala> w.close()
-
==============================
9.하나는 간결하고 아름답게 기록 기본 라이브러리 (소스 코드 참조) 모두가이 형식을 가지고 있습니다 :
하나는 간결하고 아름답게 기록 기본 라이브러리 (소스 코드 참조) 모두가이 형식을 가지고 있습니다 :
import scalax.io.Codec import scalax.io.JavaConverters._ implicit val codec = Codec.UTF8 new java.io.File("hi-file.txt").asOutput.write("I'm a hi file! ... Really!")
-
==============================
10.당신은 자바와 스칼라 라이브러리의 혼합이 작업을 수행 할 수 있습니다. 당신은 문자 인코딩을 완전히 제어 할 수 있습니다. 그러나 불행하게도, 파일 핸들이 제대로 닫히지 않습니다.
당신은 자바와 스칼라 라이브러리의 혼합이 작업을 수행 할 수 있습니다. 당신은 문자 인코딩을 완전히 제어 할 수 있습니다. 그러나 불행하게도, 파일 핸들이 제대로 닫히지 않습니다.
scala> import java.io.ByteArrayInputStream import java.io.ByteArrayInputStream scala> import java.io.FileOutputStream import java.io.FileOutputStream scala> BasicIO.transferFully(new ByteArrayInputStream("test".getBytes("UTF-8")), new FileOutputStream("test.txt"))
-
==============================
11.나는 한 줄하지 알고 있지만, 지금까지 내가 말할 수있는 안전 문제를 해결;
나는 한 줄하지 알고 있지만, 지금까지 내가 말할 수있는 안전 문제를 해결;
// This possibly creates a FileWriter, but maybe not val writer = Try(new FileWriter(new File("filename"))) // If it did, we use it to write the data and return it again // If it didn't we skip the map and print the exception and return the original, just in-case it was actually .write() that failed // Then we close the file writer.map(w => {w.write("data"); w}).recoverWith{case e => {e.printStackTrace(); writer}}.map(_.close)
당신은 예외 처리에 대해 걱정하지 않은 경우 당신은 쓸 수 있습니다
writer.map(w => {w.writer("data"); w}).recoverWith{case _ => writer}.map(_.close)
-
==============================
12.업데이트 : 나는 때문에 내가 여기에 자세히 설명이있는에보다 효과적인 솔루션을 만들었습니다 https://stackoverflow.com/a/34277491/501113
업데이트 : 나는 때문에 내가 여기에 자세히 설명이있는에보다 효과적인 솔루션을 만들었습니다 https://stackoverflow.com/a/34277491/501113
나는 나 자신이 이클립스에 대한 스칼라 IDE 내에서 스칼라 워크 시트에 더 많은 작업 찾아 (내가하게 IntelliJ IDEA에서 뭔가 상당이 생각). 어쨌든, 내가 얻을로 출력 내용의 일부를 한 라이너를 할 수 있어야한다 "출력이 차단 제한을 초과합니다." 나는 특히 스칼라 컬렉션으로 상당한 아무것도하고 경우 메시지.
나는이 문제를 단순화하기 위해 각각의 새로운 스칼라 워크 시트의 상단에 삽입 한 라이너를 함께했다 (그리고 난 아주 간단한 필요성에 대한 전체 외부 라이브러리 가져 오기 운동을 할 필요가 없습니다). 당신이 까다로운 사람과 기술적으로 두 줄 것을 통지하는 경우,이 포럼에서 더 읽을 수 있도록 단지입니다. 그것은 내 스칼라 워크 시트에서 하나의 라인입니다.
def printToFile(content: String, location: String = "C:/Users/jtdoe/Desktop/WorkSheet.txt") = Some(new java.io.PrintWriter(location)).foreach{f => try{f.write(content)}finally{f.close}}
그리고 사용법은 간단하다 :
printToFile("A fancy test string\ncontaining newlines\nOMG!\n")
이것은 내가 (완전히 파일을 메서드가 호출 될 때마다 덮어 쓰기) 기본 이외의 추가 파일을 갖고 싶어해야 나를 선택적으로 파일 이름을 제공 할 수 있습니다.
그래서, 두 번째 사용법은 간단하다 :
printToFile("A fancy test string\ncontaining newlines\nOMG!\n", "C:/Users/jtdoe/Desktop/WorkSheet.txt")
즐겨!
-
==============================
13.세미콜론의 마법을 통해, 당신은 당신이 한 줄처럼 아무것도 할 수 있습니다.
세미콜론의 마법을 통해, 당신은 당신이 한 줄처럼 아무것도 할 수 있습니다.
import java.io.PrintWriter import java.nio.file.Files import java.nio.file.Paths import java.nio.charset.StandardCharsets import java.nio.file.StandardOpenOption val outfile = java.io.File.createTempFile("", "").getPath val outstream = new PrintWriter(Files.newBufferedWriter(Paths.get(outfile) , StandardCharsets.UTF_8 , StandardOpenOption.WRITE)); outstream.println("content"); outstream.flush(); outstream.close()
from https://stackoverflow.com/questions/6879427/scala-write-string-to-file-in-one-statement by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] `def` 스칼라에서 게으른 val` 평가`대 val``대 (0) | 2019.11.11 |
---|---|
[SCALA] 스파크 : 불꽃 쉘에서 스파크 파일을 실행하는 방법 (0) | 2019.11.10 |
[SCALA] 왜 스칼라 목록 당 모두 여러 매개 변수 목록과 여러 매개 변수를 제공합니까? [복제] (0) | 2019.11.10 |
[SCALA] 스칼라에서 널 / 아무것도 / 장치의 용도 (0) | 2019.11.10 |
[SCALA] 어떻게 스칼라 변수를 캐스팅 하는가? (0) | 2019.11.10 |