Yanıtlar:
String fileContents = new File('/path/to/file').text
Karakter kodlamasını belirtmeniz gerekiyorsa, bunun yerine aşağıdakileri kullanın:
String fileContents = new File('/path/to/file').getText('UTF-8')
File
Nesnenin sıradan bir java kavanozundan kaynaklansa bile bunun işe yaradığını belirtmek isterim . Belki de Groovy'nin özniteliği olan kendi özel File
sınıfına sahip olup olmadığından emin değildim text
, ancak File
Groovy kodu veya Java kodu ile somutlaştırılmış olsun , nesnenin nereden geldiğinin önemi yok gibi görünüyor .
En kısa yol gerçekten
String fileContents = new File('/path/to/file').text
ancak bu durumda dosyadaki baytların karakter olarak nasıl yorumlandığı konusunda hiçbir denetiminiz yoktur. AFAIK groovy, dosya içeriğine bakarak buradaki kodlamayı tahmin etmeye çalışır.
Belirli bir karakter kodlaması istiyorsanız şununla bir karakter kümesi adı belirtebilirsiniz:
String fileContents = new File('/path/to/file').getText('UTF-8')
Daha fazla referans için API belgelerineFile.getText(String)
bakın .
someFile.text
akıllı bir tahmin yapmaz, sadece platform varsayılan kodlamasını kullanır (genellikle modern Linux'larda UTF-8, ancak geçersiz kılmadığınız sürece Windows / Mac OS'de windows-1252 veya MacRoman gibi bir şey -Dfile.encoding=...
)
Küçük bir varyasyon ...
new File('/path/to/file').eachLine { line ->
println line
}
en kolay yol
yani sadece yapabileceğiniz anlamına gelir:
new File(filename).text
Benim durumumda new File()
çalışmıyor FileNotFoundException
, bir Jenkins boru hattı işinde bir zaman çalıştırmak neden olur . Aşağıdaki kod bunu çözdü ve bence daha da kolay:
def fileContents = readFile "path/to/file"
Bu farkı hala tam olarak anlayamıyorum, ama belki de aynı sıkıntıya sahip olan herkese yardımcı olacaktır. Muhtemelen istisna, new File()
okumak istediğim dosyayı içeren sistemden farklı bir sistem olan groovy kodunu yürüten sistemde bir dosya oluşturması nedeniyle ortaya çıktı.
String fp_f = readFile("any_file") if (fp.length()) { currentBuild.description = fp }
Ayrıca, dosya bulunamazsa hata vardır.
Burada aynı şeyi yapmanın başka bir yolunu bulabilirsiniz.
Dosyayı oku.
File file1 = new File("C:\Build\myfolder\myTestfile.txt");
def String yourData = file1.readLines();
Tam dosyayı okuyun.
File file1 = new File("C:\Build\myfolder\myfile.txt");
def String yourData= file1.getText();
Dosya Bye Line okuyun.
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)
}
Yeni bir dosya oluşturun.
new File("C:\Temp\FileName.txt").createNewFile();
def
Türü belirttiğinizde ihtiyacınız olduğundan emin değilim .