গ্রোভির কোনও ফাইলকে স্ট্রিংয়ে কীভাবে পড়বেন?


309

আমাকে ফাইল সিস্টেম থেকে একটি ফাইল পড়তে হবে এবং গ্রোভি নিয়ন্ত্রকের একটি স্ট্রিংয়ে পুরো বিষয়বস্তু লোড করতে হবে, এটি করার সহজ উপায়টি কী?

উত্তর:


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

আপনি যদি অক্ষর এনকোডিং নির্দিষ্ট করতে চান তবে পরিবর্তে নিম্নলিখিতটি ব্যবহার করুন:

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

6
এটি গ্রোভির সৌন্দর্য :)
আইগর

1
আমার কি কিছু ঘনিষ্ঠ () বিবৃতি কার্যকর করতে হবে বা পাঠককে getText () পদ্ধতি দ্বারা বন্ধ করা হবে?
ডাস কেকস

6
@ ডাসকিক্স আমি মনে করি এটি নিরাপদ যে এই পদ্ধতিটি প্রয়োগ করা কোনও প্রয়োজনীয় সংস্থান বন্ধ করে দেয়। যাইহোক, আপনার তৈরি হওয়া কোনও পাঠকের অ্যাক্সেস নেই, তাই আপনি এটি বন্ধ করতে পারবেন না
ডোনাল

আমি উল্লেখ করতে চাই যে এটি Fileকোনও সাধারণ জাভা জার থেকে উত্পন্ন হলেও এমনকি এটি কাজ করে । আমি নিশ্চিত ছিলাম না যে গ্রোভির নিজস্ব বিশেষ Fileশ্রেণিটি textবৈশিষ্ট্য, বা অন্য কোনও কিছু আছে Fileকিনা , তবে এটি মনে হয় যে বস্তুটি কোথা থেকে এসেছে তা বিবেচ্য নয়, এটি গ্রোভি কোড বা জাভা কোড দ্বারা ইনস্ট্যান্ট করা হয়েছে কিনা।
আর্টঅফ ওয়ারফেয়ার

1
@ গ্রন্থগুলি যে কোনও অর্থ দেয় না। আমি সন্দেহ করি যে মিক্সটিতে আরও কিছু কারণ রয়েছে যেমন আপনার একটি স্থানীয় ভেরিয়েবল ছিল যা ক্ষেত্র বা এমন কোনও কিছু লুকিয়ে রাখছিল।
জেফ স্কট ব্রাউন

77

সংক্ষিপ্ততম উপায় সত্যই সঠিক

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

তবে এই ক্ষেত্রে ফাইলের বাইটগুলি কীভাবে অক্ষর হিসাবে ব্যাখ্যা করা যায় সে বিষয়ে আপনার কোনও নিয়ন্ত্রণ নেই। এএফআইএকে গ্রুভি ফাইলের সামগ্রী দেখে এখানে এনকোডিংটি অনুমান করার চেষ্টা করে।

আপনি যদি একটি নির্দিষ্ট অক্ষর এনকোডিং করতে চান তবে আপনি একটি চরসেটের নামটি নির্দিষ্ট করতে পারেন

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

আরও রেফারেন্সের জন্য এপিআই ডক্সFile.getText(String) দেখুন ।


7
এনকোডিং প্যারামিটার লাগে এমন সংস্করণটির জন্য সুপারিশ করার জন্য +1। প্লেইন someFile.textএকটি বুদ্ধিমান অনুমান দেখা যায় না, এটা শুধু প্ল্যাটফর্ম ডিফল্ট এনকোডিং (সাধারণত হল UTF-8 আধুনিক Linuxes উপর, কিন্তু Windows-1252 বা MacRoman উইন্ডোজ / ম্যাক OS, যদি না আপনি এটি দিয়ে ওভাররাইড করেছেন তার উপরে ভালো কিছু ব্যবহার -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
জেনকিন্সের জন্য কাজ করে। যেমন রিডফিল একটি অভ্যন্তরীণ কীওয়ার্ড, এবং জেনকিনস-অ্যাডমিনের কাছ থেকে কোনও আমদানি বা অতিরিক্ত অনুমোদনের দরকার নেই। পুরো ফাইলটি স্ট্রিং ভারে পড়তে হবে এবং তারপরে নীচের কোডের মাধ্যমে মুদ্রিত করা যাবে: String fp_f = readFile("any_file") if (fp.length()) { currentBuild.description = fp } এছাড়াও, যদি ফাইলটি পাওয়া না যায় তবে ত্রুটি রয়েছে।
আশীষ

1
BTW। এর কারণটি হ'ল, নতুন ফাইলটি () আপনার কম্পিউটারে ফাইলগুলি সন্ধান করে, যেমন জেনকিন্সের রিডফাইল জাভা ভিএম এর খাঁজকাটা স্যান্ডবক্সে দেখায় যেখানে সম্ভবত আপনার পাইপলাইনের জিনিসপত্র চলছে ... এছাড়াও আপনাকে স্যান্ডবক্সে রিডফিল ব্যবহার করার অনুমতি দেওয়া হচ্ছে পাইপলাইন তবে ফাইল () ব্যবহার করা ডিফল্টরূপে অনুমোদিত নয়, ফাইলটি জেনকিন্স সেটিংসে ব্যবহারের আগে আপনাকে হোয়াইটলিস্ট করতে হবে।
সাইবার্গ-এক্স 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টাইপ নির্দিষ্ট করার সময় আপনার প্রয়োজনীয়তা সম্পর্কে নিশ্চিত নই ।
ভিক্টর এম হেরাসেম পেরেজ

ডিএফ কোড ব্যবহার না করে কাজ করবে, আমার সেই অভ্যাসটি নির্দিষ্ট করার অভ্যাস আছে!
শশী সিংহ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.