ฉันจำเป็นต้องอ่านไฟล์จากระบบไฟล์และโหลดเนื้อหาทั้งหมดลงในสตริงในคอนโทรลเลอร์ Groovy วิธีที่ง่ายที่สุดในการทำเช่นนั้นคืออะไร?
ฉันจำเป็นต้องอ่านไฟล์จากระบบไฟล์และโหลดเนื้อหาทั้งหมดลงในสตริงในคอนโทรลเลอร์ Groovy วิธีที่ง่ายที่สุดในการทำเช่นนั้นคืออะไร?
คำตอบ:
String fileContents = new File('/path/to/file').text
หากคุณต้องการระบุการเข้ารหัสอักขระให้ใช้คำสั่งต่อไปนี้แทน:
String fileContents = new File('/path/to/file').getText('UTF-8')
File
วัตถุที่มาจากขวดจาวาสามัญ ฉันไม่แน่ใจว่า Groovy อาจมีFile
คลาสพิเศษของตัวเองพร้อมtext
แอตทริบิวต์หรืออะไรบางอย่าง แต่ดูเหมือนว่าไม่สำคัญว่าFile
วัตถุมาจากที่ใดไม่ว่าจะเป็นอินสแตนซ์ของโค้ด Groovy หรือโค้ด Java
วิธีที่สั้นที่สุดย่อมเป็นเพียงแค่
String fileContents = new File('/path/to/file').text
แต่ในกรณีนี้คุณไม่มีการควบคุมว่าไบต์ในไฟล์ถูกตีความเป็นอักขระอย่างไร AFAIK groovy พยายามเดาการเข้ารหัสที่นี่โดยดูที่เนื้อหาไฟล์
หากคุณต้องการการเข้ารหัสอักขระเฉพาะคุณสามารถระบุชื่อชุดอักขระด้วย
String fileContents = new File('/path/to/file').getText('UTF-8')
ดูเอกสาร APIFile.getText(String)
สำหรับการอ้างอิงเพิ่มเติม
someFile.text
ไม่ได้ทำให้เดาฉลาดมันก็ใช้การเข้ารหัสแพลตฟอร์มเริ่มต้น (ปกติ UTF-8 ที่ทันสมัย Linuxes แต่บางสิ่งบางอย่างเช่น Windows 1252 หรือ MacRoman บน Windows / Mac OS, ถ้าคุณไม่ได้แทนที่มันด้วย-Dfile.encoding=...
)
ความแตกต่างเล็กน้อย ...
new File('/path/to/file').eachLine { line ->
println line
}
วิธีที่ง่ายที่สุดก็คือ
ซึ่งหมายความว่าคุณสามารถทำได้:
new File(filename).text
ในกรณีของฉันnew File()
ไม่ทำงานมันจะทำให้เกิดการFileNotFoundException
ทำงานเมื่อใดในงานไปป์ไลน์ของเจนกินส์ รหัสต่อไปนี้แก้ไขได้และยิ่งง่ายขึ้นในความคิดของฉัน
def fileContents = readFile "path/to/file"
ฉันยังคงไม่เข้าใจความแตกต่างนี้อย่างสมบูรณ์ แต่บางทีมันอาจช่วยคนอื่นด้วยปัญหาเดียวกัน อาจเกิดข้อยกเว้นเนื่องจากnew File()
สร้างไฟล์ในระบบที่รันโค้ด groovy ซึ่งเป็นระบบที่แตกต่างจากที่มีไฟล์ที่ฉันต้องการอ่าน
String fp_f = readFile("any_file") if (fp.length()) { currentBuild.description = fp }
นอกจากนี้หากไม่พบไฟล์แสดงว่ามีข้อผิดพลาด
ที่นี่คุณสามารถค้นหาวิธีอื่นในการทำเช่นเดียวกัน
อ่านไฟล์
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
เมื่อคุณระบุประเภท