क्या जावा के साथ एक प्लेटफॉर्म-स्वतंत्र तरीका है जिस पर फ़ाइल चलने वाले ड्राइव के प्रकार का पता लगाने के लिए है? असल में मुझे बीच में अंतर करने में दिलचस्पी है: हार्ड डिस्क, हटाने योग्य ड्राइव (यूएसबी स्टिक की तरह) और नेटवर्क शेयर। जेएनआई/जेएनए समाधान सहायक नहीं होंगे। जावा 7 माना जा सकता है।जावा: फ़ाइल के प्रकार को निर्धारित करने के तरीके को कैसे निर्धारित किया जाए?
उत्तर
FileSystemView
वर्ग कुछ ड्राइव (सीएफ isFloppyDrive
, isComputerNode
) के प्रकार का पता लगाने का समर्थन करने के कार्यक्षमता है। मुझे डर है कि यह पता लगाने का कोई मानक तरीका नहीं है कि यूएसबी के माध्यम से ड्राइव कनेक्ट है या नहीं।
काल्पनिक, अपरीक्षित उदाहरण:
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileSystemView;
....
JFileChooser fc = new JFileChooser();
FileSystemView fsv = fc.getFileSystemView();
if (fsv.isFloppyDrive(new File("A:"))) // is A: a floppy drive?
JDK 7 में वहाँ एक और विकल्प है। मैंने इसका उपयोग नहीं किया है, लेकिन FileStore
एपीआई में type
विधि है। documentation कहता है कि:
इस विधि द्वारा लौटाई गई स्ट्रिंग का प्रारूप अत्यधिक कार्यान्वयन विशिष्ट है। यह इंगित कर सकता है, उदाहरण के लिए, प्रारूप का उपयोग किया गया है या यदि फ़ाइल स्टोर स्थानीय या दूरस्थ है।
जाहिर है जिस तरह से उपयोग करने के लिए यह इस होगा:
import java.nio.*;
....
for (FileStore store: FileSystems.getDefault().getFileStores()) {
System.out.printf("%s: %s%n", store.name(), store.type());
}
FileSystemView.isFloppyDrive() कुछ "path.equals (" ए: \\ ")" द्वारा लागू किया गया है जो दुर्भाग्य से सहायक नहीं होगा। इसके अलावा, मुझे FileStore.type() सहायक नहीं मिला। यह मेरे नेटवर्क शेयरों के लिए "एनटीएफएस" देता है। – mstrap
फ़ाइलस्टोर # प्रकार() विंडोज 7, जावा 7 पर नेटवर्क ड्राइव के लिए "एनटीएफएस" देता है। –
फ़ाइलस्टोर # प्रकार() विंडोज 10 पर भी स्थानीय हार्ड ड्राइव के लिए "एनटीएफएस" देता है। – simpleuser
इस चर्चा पर एक नज़र डालें: How can I get list of all drives but also get the corresponding drive type (removable,local disk, or cd-rom,dvd-rom... etc)?
विशेष रूप http://docs.oracle.com/javase/1.5.0/docs/api/javax/swing/filechooser/FileSystemView.html
पर ध्यान देना मैं व्यक्तिगत रूप से इस इस्तेमाल नहीं किया है लेकिन यह प्रासंगिक लगता है। इसमें isFloppyDrive
जैसी विधि है।
इसके अलावा JSmooth
FileSystemView काम नहीं करेगा। जेएसमुथ काम कर सकता है, हालांकि मैं कुछ एपीआई ढूंढने की उम्मीद कर रहा था जो जेआरई के साथ ही जहाजों को भेजता है। – mstrap
पर एक नज़र आप के साथ जावा का उपयोग कर cmd पर अमल कर सकता है ले:
fsutil fsinfo drivetype {drive letter}
परिणाम आप कुछ इस तरह दे देंगे:
C: - Fixed Drive
D: - CD-ROM Drive
E: - Removable Drive
P: - Remote/Network Drive
यहाँ एक सार है जो दिखाता है कि net use
का उपयोग करके इसे कैसे निर्धारित किया जाए: https://gist.github.com/digulla/31eed31c7ead29ffc7a30aaf87131def
कोड का सबसे महत्वपूर्ण हिस्सा:
public boolean isDangerous(File file) {
if (!IS_WINDOWS) {
return false;
}
// Make sure the file is absolute
file = file.getAbsoluteFile();
String path = file.getPath();
// System.out.println("Checking [" + path + "]");
// UNC paths are dangerous
if (path.startsWith("//")
|| path.startsWith("\\\\")) {
// We might want to check for \\localhost or \\127.0.0.1 which would be OK, too
return true;
}
String driveLetter = path.substring(0, 1);
String colon = path.substring(1, 2);
if (!":".equals(colon)) {
throw new IllegalArgumentException("Expected 'X:': " + path);
}
return isNetworkDrive(driveLetter);
}
/** Use the command <code>net</code> to determine what this drive is.
* <code>net use</code> will return an error for anything which isn't a share.
*
* <p>Another option would be <code>fsinfo</code> but my gut feeling is that
* <code>net</code> should be available and on the path on every installation
* of Windows.
*/
private boolean isNetworkDrive(String driveLetter) {
List<String> cmd = Arrays.asList("cmd", "/c", "net", "use", driveLetter + ":");
try {
Process p = new ProcessBuilder(cmd)
.redirectErrorStream(true)
.start();
p.getOutputStream().close();
StringBuilder consoleOutput = new StringBuilder();
String line;
try (BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()))) {
while ((line = in.readLine()) != null) {
consoleOutput.append(line).append("\r\n");
}
}
int rc = p.waitFor();
// System.out.println(consoleOutput);
// System.out.println("rc=" + rc);
return rc == 0;
} catch(Exception e) {
throw new IllegalStateException("Unable to run 'net use' on " + driveLetter, e);
}
}
- 1. बहिष्कृत अनुमतियों को कैसे निर्धारित किया जाए?
- 2. फ़ाइल प्रकार कैसे निर्धारित करें?
- 3. टेक्स्ट फ़ाइल की एन्कोडिंग तालिका को निर्धारित करने के लिए
- 4. subprocess.Popen() को कैसे निर्धारित किया जाए जब खोल = सही
- 5. अभिव्यक्ति के प्रकार को निर्धारित करना
- 6. सामग्री द्वारा फ़ाइल MIME प्रकार को कैसे निर्धारित करें?
- 7. ActiveModel :: त्रुटियों के सत्यापन प्रकार को कैसे निर्धारित करें
- 8. बीएटी फ़ाइल को निर्धारित कार्य
- 9. रूबी पर रूबी में निष्पादन के दौरान नियंत्रक चर के मान को कैसे निर्धारित किया जाए?
- 10. विभिन्न दायरे में दो चर के संदर्भ समानता को कैसे निर्धारित किया जाए?
- 11. फ़ाइल के विस्तार को जानने के बिना फ़ाइल के प्रकार को निर्धारित करने का कोई आसान तरीका है?
- 12. मैं जावा में जेनेरिक फ़ील्ड के प्रकार को कैसे निर्धारित कर सकता हूं?
- 13. "जेनेरिक फ़ंक्शन" के रिटर्न प्रकार को निर्धारित करना
- 14. Matlab का उपयोग कर पीसीए में चर के महत्व को कैसे निर्धारित किया जाए?
- 15. जावा में बाइनरी/टेक्स्ट फ़ाइल प्रकार निर्धारित करना?
- 16. किसी दुकान में विकास के वास्तविक स्तर को कैसे निर्धारित किया जाए, उदा। सी ++ बनाम सी?
- 17. glibc (glibcxx) बाइनरी के संस्करण को कैसे निर्धारित किया जाए इस पर निर्भर करेगा?
- 18. रेलवे एसोसिएशन उत्सुक लोड होने पर कैसे निर्धारित किया जाए?
- 19. पृष्ठभूमि कार्य को निर्धारित करने के लिए कैसे करें
- 20. टैब वर्णों के साथ std :: स्ट्रिंग की (मुद्रित) लंबाई को कैसे निर्धारित किया जाए?
- 21. विंडोज फोन 7 न्यूमेरिक कीबोर्ड में दबाए गए कुंजी के मूल्य को कैसे निर्धारित किया जाए?
- 22. निर्धारित बोर्ड प्रकार Arduino
- 23. रनटाइम-निर्धारित प्रकार
- 24. जाल वर्गों को गुणों का उपयोग करके, जावा फ़ील्ड के अंदर घोषित करने के तरीके को कैसे घोषित किया जाए?
- 25. एक निर्धारित स्थिति में दृश्य को कैसे बढ़ाया जाए?
- 26. जावा एप्लिकेशन को वेबसाइट के साथ कैसे इंटरैक्ट किया जाए
- 27. jQuery संस्करण को निर्धारित और मुद्रित करने के लिए कैसे?
- 28. रूबी निष्पादन पर्यावरण को निर्धारित करने के लिए कैसे करें
- 29. CGPaths के छेड़छाड़ को निर्धारित करने के लिए
- 30. स्ट्रिंग के आकार को निर्धारित करने के लिए, और इसे
शायद यह हल करना आसान हो सकता है कि आप इसे क्यों जानना चाहते हैं? –
मुझे अंतर्निहित फाइल सिस्टम के कुछ दोषों के बारे में उपयोगकर्ताओं को चेतावनी देने के लिए उस जानकारी की आवश्यकता है: प्रदर्शन, फ़ाइल सिस्टम निगरानी काम नहीं करेगी, ऐसी चीजें। – mstrap
कृपया देखें http://stackoverflow.com/questions/3542018/how-can-i-get-list-of-all-drives-but-also-get-the-corresponding-drive-type-remo/17972420#17972420 मैं वांछित जानकारी तक पहुंचने के लिए डब्लूएमआई का उपयोग कर रहा हूं। –