আমি =
জাভা সম্পত্তি ফাইলগুলিতে সমান চিহ্ন ( ) এড়াতে পারি কীভাবে ? আমি আমার ফাইলে নিম্নলিখিত হিসাবে কিছু রাখতে চাই:
table.whereclause=where id=100
উত্তর:
তদুপরি, জাভাদোকের উপর ক্লাস থেকে লোড (পাঠক পাঠক) পদ্ধতিটি দেখুনProperty
ইন load(Reader reader)
পদ্ধতি ডকুমেন্টেশন এটা বলে
কী লাইন প্রথম অ সাদা স্থান অক্ষর দিয়ে এবং আপ শুরু চরিত্রদের সব রয়েছে, কিন্তু সহ না, প্রথম unescaped
'='
,':'
বা সাদা ব্যবধান একটি লাইন টারমিনেটর ছাড়া অন্য অক্ষর। এই সমস্ত মূল সমাপ্তি অক্ষরগুলি পূর্ববর্তী ব্যাকস্ল্যাশ অক্ষর দ্বারা পালিয়ে এসে কীটিতে অন্তর্ভুক্ত থাকতে পারে; উদাহরণ স্বরূপ,\:\=
দ্বি-চরিত্রের কী
":=".
লাইন টার্মিনেটর অক্ষরগুলি ব্যবহার করে\r
এবং\n
পালানোর ক্রমগুলি অন্তর্ভুক্ত করা যেতে পারে । কী বাদ দেওয়ার পরে কোনও সাদা স্থান; যদি কীটির পরে প্রথম অ-সাদা স্থানের অক্ষর'='
বা হয়':'
, তবে তা এড়ানো হবে এবং এটির পরে কোনও সাদা স্থানের অক্ষরও বাদ দেওয়া হবে। লাইনে থাকা সমস্ত অক্ষর যুক্ত উপাদানগুলির স্ট্রিংয়ের অংশ হয়ে যায়; যদি কোনও বাকী অক্ষর না থাকে তবে উপাদানটি খালি স্ট্রিং""
। কী এবং উপাদানটি তৈরি করে কাঁচা চরিত্রের ক্রমগুলি সনাক্ত করা গেলে, উপরে বর্ণিত অনুসারে এস্কেপ প্রসেসিং করা হয়।
আশা করি এইটি কাজ করবে.
আপনার নির্দিষ্ট উদাহরণে আপনাকে সমান পালাতে হবে না - এটি কেবল কীটির অংশ থাকলে আপনাকে এড়াতে হবে। বৈশিষ্ট্যের ফাইলের ফর্ম্যাটটি প্রথমে অনস্ক্যাপেড সমান মানের অংশ হিসাবে সমস্ত অক্ষরের সাথে আচরণ করবে treat
জাভাতে ডিফল্ট পালানোর অক্ষরটি '\'।
যাইহোক, জাভা সম্পত্তি ফাইলের ফর্ম্যাট কী = মান রয়েছে, এটি প্রথম হিসাবে সমান হওয়ার পরে সমস্ত কিছু বিবেচনা করা উচিত।
এই ধরণের সমস্যা এড়ানোর সর্বোত্তম উপায় এটি প্রোগ্রামগতভাবে সম্পত্তি তৈরি এবং তারপরে এগুলি সংরক্ষণ করে। উদাহরণস্বরূপ, এই জাতীয় কোড ব্যবহার করে:
java.util.Properties props = new java.util.Properties();
props.setProperty("table.whereclause", "where id=100");
props.store(System.out, null);
এটি সিস্টেমে আউটপুট দেয় the সঠিকভাবে পালানো সংস্করণ।
আমার ক্ষেত্রে আউটপুটটি ছিল:
#Mon Aug 12 13:50:56 EEST 2013
table.whereclause=where id\=100
আপনি দেখতে পাচ্ছেন যে, সঠিক তথ্য হিসাবে গ্যারান্টিযুক্ত .properties ফাইলগুলির সামগ্রী তৈরি করার এটি একটি সহজ উপায়। এবং আপনি চান হিসাবে অনেক সম্পত্তি রাখতে পারেন।
আমার ক্ষেত্রে, দু'জন অগ্রণী '\\' আমার পক্ষে ভাল কাজ করছে।
উদাহরণস্বরূপ: যদি আপনার শব্দটিতে '#' অক্ষর থাকে (যেমন এএ # 100, আপনি দুটি প্রধান '\\' দিয়ে এড়াতে পারবেন
key= aa\\#100
আপনি এখানে দেখতে পারেন একটি জাভা সম্পত্তি কী কী একটি ফাঁকা চরিত্র অন্তর্ভুক্ত করতে পারে?
'=' equal u003d সমান পালনের জন্য
table.whereclause = যেখানে id = 100
কী: [টেবিল। কোথাও ক্ল্যাস] মান: [যেখানে আইডি = 100]
table.whereclause where u003ddd id = 100
কী: [টেবিল। কোথাও ক্ল্যাস = যেখানে] মান: [আইডি = 100]
টেবিল.ওহেন ক্লাউজ \ u003dwhere \ u0020id \ u003d100
কী: [টেবিল। কোথাও ক্লাজ = যেখানে আইডি = 100] মান: []
এই পদ্ধতির .properties
ফাইলগুলির সাথে 100% সামঞ্জস্যপূর্ণ হওয়ার গ্যারান্টিযুক্ত মান প্রোগ্রাম করার জন্য সহায়তা করা উচিত :
public static String escapePropertyValue(final String value) {
if (value == null) {
return null;
}
try (final StringWriter writer = new StringWriter()) {
final Properties properties = new Properties();
properties.put("escaped", value);
properties.store(writer, null);
writer.flush();
final String stringifiedProperties = writer.toString();
final Pattern pattern = Pattern.compile("(.*?)escaped=(.*?)" + Pattern.quote(System.lineSeparator()) + "*");
final Matcher matcher = pattern.matcher(stringifiedProperties);
if (matcher.find() && matcher.groupCount() <= 2) {
return matcher.group(matcher.groupCount());
}
// This should never happen unless the internal implementation of Properties::store changed
throw new IllegalStateException("Could not escape property value");
} catch (final IOException ex) {
// This should never happen. IOException is only because the interface demands it
throw new IllegalStateException("Could not escape property value", ex);
}
}
আপনি এটিকে কল করতে পারেন:
final String escapedPath = escapePropertyValue("C:\\Users\\X");
writeToFile(escapedPath); // will pass "C\\:\\\\Users\\\\X"
এই পদ্ধতিটি খানিকটা ব্যয়বহুল তবে, কোনও ফাইলে বৈশিষ্ট্য লেখার জন্য সাধারণত যাইহোক একটি বিচ্ছিন্ন অপারেশন।