Groovy에서 파일을 문자열로 읽는 방법은 무엇입니까?


309

파일 시스템에서 파일을 읽고 전체 내용을 그루비 컨트롤러의 문자열로로드해야합니다. 가장 쉬운 방법은 무엇입니까?

답변:


507
String fileContents = new File('/path/to/file').text

문자 인코딩을 지정해야하는 경우 대신 다음을 사용하십시오.

String fileContents = new File('/path/to/file').getText('UTF-8')

6
그것은 Groovy의 아름다움입니다 :)
Igor

1
close () 문을 실행해야합니까, 아니면 getText () 메서드로 독자를 닫을 수 있습니까?
das Keks

6
@dasKeks이 방법의 구현이 필요한 리소스를 모두 닫았다 고 가정하는 것이 안전하다고 생각합니다. 어쨌든, 당신은 어떤 독자에게도 접근 할 수 없으므로 그것을 닫을 수 없습니다
Dónal

File객체가 일반 Java jar에서 시작된 경우에도 작동한다고 언급하고 싶습니다 . Groovy Filetext속성 또는 무언가 가있는 자체 특수 클래스 가 있는지 확실 하지 않지만 FileGroovy 코드 또는 Java 코드로 인스턴스화되는지 여부에 관계없이 객체의 출처는 중요하지 않습니다 .
ArtOfWarfare

1
@roens 그건 말이되지 않습니다. 필드 또는 그와 비슷한 것을 숨기는 로컬 변수가있는 것처럼 믹스에 다른 요소가 있다고 생각합니다.
Jeff Scott Brown

77

가장 짧은 방법은 실제로

String fileContents = new File('/path/to/file').text

그러나이 경우 파일의 바이트가 문자로 해석되는 방식을 제어 할 수 없습니다. AFAIK groovy는 파일 내용을보고 인코딩을 추측하려고합니다.

특정 문자 인코딩을 원하면 다음과 같이 문자 세트 이름을 지정할 수 있습니다.

String fileContents = new File('/path/to/file').getText('UTF-8')

자세한 내용은 API 문서를File.getText(String) 참조하십시오.


7
인코딩 매개 변수를 사용하는 버전을 권장하면 +1입니다. 평범한 someFile.text것은 지능적인 추측이 아니며 단순히 플랫폼 기본 인코딩을 사용합니다 (일반적으로 최신 Linux에서는 UTF-8이지만 Windows / Mac OS에서는 Windows-1252 또는 MacRoman과 같이 재정의하지 않는 한 -Dfile.encoding=...)
Ian Roberts

최소한 Groovy의 최신 버전에서는 추측이 지능적인 추측을하는 CharsetToolkit 을 사용하여 수행됩니다 .
Matthijs Bierman

53

약간의 변화 ...

new File('/path/to/file').eachLine { line ->
  println line
}

5
사실이지만 "기록을 위해"캡처하는 것은 여전히 ​​유용한 관용구입니다.
Steve Byrne

파일을 한 줄씩 처리하는 것이 좋습니다.
Bill K


12

제 경우 new File()에는 작동하지 않아 FileNotFoundExceptionJenkins 파이프 라인 작업에서 실행될 때 발생합니다 . 다음 코드는 이것을 해결했으며 내 의견으로는 훨씬 쉽습니다.

def fileContents = readFile "path/to/file"

나는 여전히이 차이를 완전히 이해하지 못하지만 같은 문제를 가진 다른 사람을 도울 수 있습니다. 아마도 new File()그루비 코드를 실행하는 시스템에 파일을 생성 했기 때문에 예외가 발생 했을 수 있습니다. 그루비 코드는 내가 읽고 싶은 파일이 포함 된 시스템과 다른 시스템이었습니다.


readFile 단계가 제대로 작동합니까? 나를 위해 그것은 작동하지만 일부 단어에 ''작은 따옴표를, 나는 이해하지 못한다!
codeGeass

그것은 나를 위해 잘 작동하고 내가 직접 배치하지 않은 따옴표를 발견하지 못했습니다 (파일 내용에 따옴표를 의미한다고 생각합니다). 이것에 대해 새로운 질문을 만들 가치가 있습니까? 이 경우 따옴표가 나타나는 위치와 정확한 위치를 지정하십시오.
P Kuijpers

2
젠킨스에서 작동합니다. readFile은 내부 키워드이므로 jenkins-admin으로부터 가져 오기 또는 추가 승인이 필요하지 않습니다. 전체 파일을 String var에서 읽은 다음 아래 코드를 통해 인쇄 할 수 있습니다. String fp_f = readFile("any_file") if (fp.length()) { currentBuild.description = fp } 또한 파일을 찾을 수 없으면 오류가 있습니다.
ashish

1
Btw. 그 이유는 Jenkins의 readFile이 파이프 라인 작업이 실행중인 java vm의 그루비 샌드 박스에서 새 파일 ()이 컴퓨터에서 파일을 찾는 것입니다 ... 또한 샌드 박스에서 readfile을 사용할 수 있습니다 파이프 라인이지만 File () 사용은 기본적으로 허용되지 않습니다. 파일을 사용하려면 Jenkins 설정에서 허용 목록에 있어야합니다.
Cyborg-X1

2

여기서 동일한 방법으로 다른 방법을 찾을 수 있습니다.

파일을 읽습니다.

File file1 = new File("C:\Build\myfolder\myTestfile.txt");
def String yourData = file1.readLines();

전체 파일을 읽으십시오.

File file1 = new File("C:\Build\myfolder\myfile.txt");
def String yourData= file1.getText();

Line Bye Line 파일을 읽습니다.

File file1 = new File("C:\Build\myfolder\myTestfile.txt");
for (def i=0;i<=30;i++) // specify how many line need to read eg.. 30
{
 log.info file1.readLines().get(i)

}

새 파일을 작성하십시오.

new File("C:\Temp\FileName.txt").createNewFile();

def유형을 지정할 때 필요하지 않습니다 .
Victor M Herasme Perez

데프 코드를 사용하지 않으면 작동 할 수 있습니다.이 변수를 정의하는 습관이 있습니다!
shashi singh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.