दिलचस्प पोस्ट
जावा: अनजान तिथि अपवाद एक जनरेटर (पायथन) का प्रयोग करके फाटा फ़ाइल पार्स करना कैसे UITextView में लिंक पर क्लिक करें अवरोधन? स्टेटमेंट .setFetchSize (nSize) विधि वास्तव में SQL सर्वर JDBC ड्रायवर में क्या करती है? अजगर में एक सूची के सभी संयोजन उत्पन्न करना पीडीएफ में एसवीजी कन्वर्ट करें .NET 4 GUID कैसे उत्पन्न होते हैं? डेल निर्यात फ़ंक्शन को एन्यूमरेट करने के लिए Win32 API? किसी फ़ाइल से लाइन ढूंढें जो किसी अन्य फ़ाइल में मौजूद नहीं हैं PHP रिलेशनल डेटा के साथ एक सरणी से एक बहुआयामी सरणी बनाएं स्थिति पूर्ण और अतिप्रवाह छिपा हुआ HttpWebRequest के साथ कुकीज़ का उपयोग कैसे करें सामग्री डिज़ाइन दिशानिर्देशों की तरह दिखाई देने वाला एक SearchView बनाना एंड्रॉइड – वेबव्यू में प्रवेश के बाद कुकीज़ निकालने MSBuild के माध्यम से MSDeploy के लिए मान्य पैरामीटर

कैसे जावा में पथ गठबंधन करने के लिए?

क्या सी # / .net में System.IO.Path.Combine() लिए एक जावा बराबर है? या यह पूरा करने के लिए कोई भी कोड?

यह स्थिर विधि पथ में एक या अधिक स्ट्रिंग को जोड़ती है

वेब के समाधान से एकत्रित समाधान "कैसे जावा में पथ गठबंधन करने के लिए?"

सब कुछ स्ट्रिंग-आधारित रखने के बजाए, आपको एक ऐसा क्लास का उपयोग करना चाहिए जो फ़ाइल सिस्टम पथ का प्रतिनिधित्व करने के लिए डिज़ाइन किया गया है।

यदि आप जावा 7 या जावा 8 का उपयोग कर रहे हैं, तो आपको java.nio.file.Path का उपयोग करने के लिए दृढ़ता से विचार करना चाहिए; Path.resolve का उपयोग किसी दूसरे मार्ग के साथ या स्ट्रिंग के साथ गठबंधन के लिए किया जा सकता है। Paths सहायक वर्ग भी उपयोगी है उदाहरण के लिए:

 Path path = Paths.get("foo", "bar", "baz.txt"); 

यदि आपको पूर्व-जावा -7 वातावरण को पूरा करने की आवश्यकता है, तो आप java.io.File उपयोग कर सकते हैं, जैसे:

 File baseDirectory = new File("foo"); File subDirectory = new File(baseDirectory, "bar"); File fileInDirectory = new File(subDirectory, "baz.txt"); 

यदि आप इसे वापस स्ट्रिंग के रूप में चाहते हैं, तो आप getPath() को कॉल कर सकते हैं। दरअसल, यदि आप वास्तव में Path.Combine नकल करना चाहते थे। Path.Combine , तो आप कुछ ऐसा ही लिख सकते हैं:

 public static String combine(String path1, String path2) { File file1 = new File(path1); File file2 = new File(file1, path2); return file2.getPath(); } 

जावा 7 में, आपको resolve उपयोग करना चाहिए:

 Path newPath = path.resolve(childPath); 

जबकि NIO2 पथ वर्ग को अनावश्यक रूप से भिन्न एपीआई के साथ फाइल करने के लिए कुछ अनावश्यक प्रतीत हो सकता है, यह वास्तव में अधिक सुशोभित और मजबूत है

नोट करें कि Paths.get() (जैसा कि किसी अन्य व्यक्ति द्वारा सुझाया गया है) में कोई अधिभार नहीं ले रहा है, और Path रहा है Paths.get(path.toString(), childPath) resolve() रूप में resolve() ही बात नहीं है resolve()resolve() अधिक बुद्धिमान है। Paths.get() डॉक्स से :

ध्यान दें कि जब यह विधि बहुत सुविधाजनक है, इसका प्रयोग डिफ़ॉल्ट फ़ाइल सिस्टम के लिए एक अनुमानित संदर्भ और कॉलिंग कोड की उपयोगिता को सीमित करेगा। इसलिए इसे लाइब्रेरी कोड में लचीला पुन: उपयोग के लिए उपयोग नहीं किया जाना चाहिए। एक अधिक लचीला विकल्प एक मौजूदा पथ उदाहरण को एक एंकर के रूप में उपयोग करना है, जैसे:

 Path dir = ... Path path = dir.resolve("file"); 

resolve लिए बहन कार्य उत्कृष्ट relativize :

 Path childPath = path.relativize(newPath); 

मुख्य ऑब्जेक्ट फ़ाइल ऑब्जेक्ट का उपयोग करना है हालांकि कॉमन्स आईओ में एक क्लास फ़ाइलनाम है, जो कि इस तरह की चीज कर सकते हैं, जैसे कि कॉन्सैट () विधि।

मुझे जॉन के मूल उत्तर के बाद से यह लंबे समय से पता है, लेकिन मुझे ओपी के लिए एक समान आवश्यकता थी।

जॉन के समाधान का विस्तार करने के माध्यम से मैं निम्नलिखित के साथ आया था, जो एक या एक से अधिक मार्ग खंडों को लेगा, ऐसे कई मार्ग खंड लेते हैं जिन्हें आप इसे फेंक सकते हैं।

प्रयोग

 Path.combine("/Users/beardtwizzle/"); Path.combine("/", "Users", "beardtwizzle"); Path.combine(new String[] { "/", "Users", "beardtwizzle", "arrayUsage" }); 

इसी तरह की समस्या के साथ दूसरों के लिए यहां कोड

 public class Path { public static String combine(String... paths) { File file = new File(paths[0]); for (int i = 1; i < paths.length ; i++) { file = new File(file, paths[i]); } return file.getPath(); } } 

जोडास्टेफ़ेन के जवाब को बढ़ाने के लिए, अपाचे कॉमन्स आईओ में फ़ाइल नाम है जो यह करता है। उदाहरण (लिनक्स पर):

 assert org.apache.commons.io.FilenameUtils.concat("/home/bob", "work\\stuff.log") == "/home/bob/work/stuff.log" 

यह प्लेटफॉर्म स्वतंत्र है और आपके सिस्टम की जरूरतों को विभाजित करेगा।

प्लेटफ़ॉर्म स्वतंत्र दृष्टिकोण (फाइल। सेपरेटर का उपयोग करता है, अर्थात काम करता है ऑपरेशन सिस्टम पर निर्भर करता है, जहां कोड चल रहा है:

 java.nio.file.Paths.get(".", "path", "to", "file.txt") // relative unix path: ./path/to/file.txt // relative windows path: .\path\to\filee.txt java.nio.file.Paths.get("/", "path", "to", "file.txt") // absolute unix path: /path/to/filee.txt // windows network drive path: \\path\to\file.txt java.nio.file.Paths.get("C:", "path", "to", "file.txt") // absolute windows path: C:\path\to\file.txt 

यहां एक समाधान है जो कई पथ भागों और किनारे स्थितियों को संभालता है:

 public static String combinePaths(String ... paths) { if ( paths.length == 0) { return ""; } File combined = new File(paths[0]); int i = 1; while ( i < paths.length) { combined = new File(combined, paths[i]); ++i; } return combined.getPath(); } 

यदि आपको स्ट्रिंग्स से अधिक की आवश्यकता नहीं है, तो आप com.google.common.io.Files का उपयोग कर सकते हैं

 Files.simplifyPath("some/prefix/with//extra///slashes" + "file//name") 

लेना

 "some/prefix/with/extra/slashes/file/name"