web-dev-qa-db-ja.com

Groovyのファイルを文字列に読み込む方法

私はファイルシステムからファイルを読み、groovyコントローラの文字列に内容全体をロードする必要があります、それをする最も簡単な方法は何ですか?

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

文字エンコードを指定する必要がある場合は、代わりに以下を使用してください。

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

最短の方法は確かにちょうど

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

しかし、この場合、ファイル内のバイトが文字としてどのように解釈されるのかを制御することはできません。私の知る限りでは、ファイルの内容を見てエンコーディングを推測しています。

特定の文字エンコーディングが必要な場合は、次のようにして文字セット名を指定できます。

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

詳しくは File.getText(String) のAPIドキュメントをご覧ください。

75
jaetzold

ちょっとしたバリエーション...

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

最も簡単な方法は

new File(filename).getText()

それはあなたがただできることを意味します:

new File(filename).text

11
Reverend Gonzo

私の場合はnew File()が機能しないので、Jenkinsパイプラインジョブで実行するとFileNotFoundExceptionが発生します。次のコードはこれを解決しました、そして私の意見ではもっと簡単です:

def fileContents = readFile "path/to/file"

私はまだこの違いを完全には理解していませんが、多分それは同じ問題を抱えている誰かを助けるでしょう。おそらく、new File()がgroovyコードを実行するファイルをシステム上に作成したために例外が発生したのです。

7
P Kuijpers

ここで他の方法で同じことを見つけることができます。

ファイルを読み込みます。

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();
2
shashi singh