एक स्ट्रिंग में ग्रूवी में एक फाइल कैसे पढ़ें?


309

मुझे फ़ाइल सिस्टम से एक फ़ाइल पढ़ने और एक ग्रूवी नियंत्रक में एक स्ट्रिंग में संपूर्ण सामग्री लोड करने की आवश्यकता है, ऐसा करने का सबसे आसान तरीका क्या है?

जवाबों:


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

यदि आपको वर्ण एन्कोडिंग निर्दिष्ट करने की आवश्यकता है, तो इसके बजाय निम्नलिखित का उपयोग करें:

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

6
कि Groovy की सुंदरता है :)
इगोर

1
क्या मुझे कुछ करीबी () कथनों पर अमल करना होगा या पाठक getText () विधि द्वारा बंद कर दिया जाएगा?
दास केक्स

6
@dasKeks मुझे लगता है कि यह मानना ​​सुरक्षित है कि इस पद्धति का कार्यान्वयन किसी भी आवश्यक संसाधनों को बंद कर देता है। वैसे भी, आपके पास किसी भी पाठक की पहुंच नहीं है, जिसे बनाया जा सकता है, इसलिए आप इसे बंद नहीं कर सकते
Dónal

मैं यह उल्लेख करना चाहता हूं कि यह कार्य तब भी होता है जब Fileवस्तु की उत्पत्ति एक साधारण जावा जार से हुई हो। मुझे यकीन नहीं था कि हो सकता है कि ग्रूवी Fileकी textविशेषता या कुछ और के साथ अपना विशेष वर्ग था , लेकिन ऐसा लगता है कि यह कोई फर्क नहीं पड़ता कि Fileवस्तु कहां से आती है, चाहे वह ग्रूवी कोड या जावा कोड द्वारा त्वरित हो।
ArtOfWarfare

1
@ ऐसा कोई मतलब नहीं है। मुझे संदेह है कि मिश्रण में कुछ अन्य कारक हैं जैसे कि आपके पास एक स्थानीय चर था जो किसी क्षेत्र को छुपा रहा था या ऐसा कुछ।
जेफ स्कॉट ब्राउन

77

सबसे छोटा रास्ता वास्तव में सिर्फ है

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

लेकिन इस मामले में आपके पास कोई नियंत्रण नहीं है कि फ़ाइल में बाइट्स को वर्णों के रूप में कैसे समझा जाता है। AFAIK ग्रूवी फ़ाइल सामग्री को देखकर यहाँ एन्कोडिंग का अनुमान लगाने की कोशिश करता है।

यदि आप एक विशिष्ट वर्ण एन्कोडिंग चाहते हैं, तो आप एक चारसेट नाम निर्दिष्ट कर सकते हैं

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

आगे के संदर्भ के लिए एपीआई डॉक्सFile.getText(String) देखें ।


7
एन्कोडिंग पैरामीटर लेने वाले संस्करण की सिफारिश करने के लिए +1। मैदान someFile.textएक बुद्धिमान अनुमान नहीं लगाता है, यह बस प्लेटफ़ॉर्म डिफ़ॉल्ट एन्कोडिंग का उपयोग करता है (आमतौर पर आधुनिक लिनक्स पर UTF-8, लेकिन विंडोज़ / मैक ओएस पर विंडोज़ 1252 या MacRoman जैसा कुछ, जब तक आपने इसे ओवरराइड नहीं किया है -Dfile.encoding=...)
इयान राबर्ट्स

ग्रूवी के हाल के संस्करणों में कम से कम, अनुमान चारसेट टोलकिट का उपयोग करके किया जाता है जो एक बुद्धिमान अनुमान लगाता है।
मैथिज बायमैन

53

थोड़ी भिन्नता ...

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

5
सच है, लेकिन "रिकॉर्ड के लिए" पर कब्जा करने के लिए यह अभी भी एक उपयोगी मुहावरा है।
स्टीव बयने

यह देखने के लिए एक अच्छी बात है - लाइन तुच्छ द्वारा एक फ़ाइल लाइन को संसाधित करता है।
बिल के


12

मेरे मामले में new File()काम नहीं करता है, यह FileNotFoundExceptionजेनकींस पाइपलाइन कार्य में चलने पर कारण बनता है । निम्नलिखित कोड ने इसे हल किया, और मेरी राय में और भी आसान है:

def fileContents = readFile "path/to/file"

मैं अभी भी इस अंतर को पूरी तरह से नहीं समझता हूं, लेकिन शायद यह किसी और को भी उसी परेशानी में मदद करेगा। संभवतः इसका अपवाद था क्योंकि new File()सिस्टम पर एक फ़ाइल बनाता है जो ग्रूवी कोड को निष्पादित करता है, जो कि उस फ़ाइल की तुलना में एक अलग प्रणाली थी जिसमें वह फ़ाइल होती है जिसे मैं पढ़ना चाहता था।


क्या रीडफ़ाइल चरण आपके लिए ठीक काम करता है? मेरे लिए यह काम करता है लेकिन यह कुछ शब्दों पर 'एकल उद्धरण' बनाता है, मुझे समझ नहीं आता!
कोडगैस

यह मेरे लिए ठीक काम करता है, और किसी भी ऐसे उद्धरण का सामना नहीं करता जो मैंने खुद नहीं रखा था (मुझे लगता है कि आप फ़ाइल सामग्री में उद्धरण का मतलब है)। शायद इसके लिए एक नया प्रश्न बनाने के लायक है? उस स्थिति में, यह निर्दिष्ट करने का प्रयास करें कि किन मामलों में उद्धरण दिखाई देते हैं और कहाँ बिल्कुल।
पी कूजपर्स

2
जेनकींस के लिए काम करता है। जैसा कि readFile एक आंतरिक कीवर्ड है, और इसे जेनकिंस-एडमिन से किसी भी आयात या अतिरिक्त अनुमोदन की आवश्यकता नहीं है। पूरी फ़ाइल स्ट्रिंग संस्करण में पढ़ी जा सकती है और फिर नीचे दिए गए कोड के माध्यम से मुद्रित की जा सकती है: String fp_f = readFile("any_file") if (fp.length()) { currentBuild.description = fp } इसके अलावा, यदि फ़ाइल नहीं मिली है, तो त्रुटि है।
आशीष

1
Btw। इसका कारण यह है, कि नई फ़ाइल () आपके कंप्यूटर पर फ़ाइलों की तलाश करती है, जैसा कि जेनकिंस में readFile जावा vm के ग्रूवी सैंडबॉक्स में दिखता है, जहां आपकी पाइपलाइन सामग्री शायद चल रही है ... इसके अलावा आपको सैंडबॉक्स में रीडफाइल का उपयोग करने की अनुमति है पाइपलाइन लेकिन फ़ाइल () का उपयोग करना डिफ़ॉल्ट रूप से अनुमति नहीं है, फ़ाइल का उपयोग करने से पहले आपको जेनकिंस सेटिंग में व्हाइटलाइनिस्ट करना होगा।
साइबोर्ग-एक्स 1

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();

फ़ाइल लाइन बाय लाइन पढ़ें।

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जब आप प्रकार निर्दिष्ट करते हैं, तो मुझे यकीन नहीं है कि आपको इसकी आवश्यकता है
विक्टर एम हेरासमी पेरेज़

डीफ़ कोड का उपयोग किए बिना काम करेगा, मुझे उन चर को परिभाषित करने की आदत है!
शशि सिंह
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.