2014-10-31 4 views
6

मैं जावा के एनओओ पैकेज में नया हूं और मैं यह नहीं समझ सकता कि एक निर्देशिका से दूसरी निर्देशिका में फ़ाइल कैसे प्राप्त करें। मेरा कार्यक्रम किसी निर्देशिका और इसकी उपनिर्देशिकाओं और प्रक्रियाओं के माध्यम से कुछ शर्तों के आधार पर पढ़ना है। मैं Files.walkFileTree का उपयोग कर सभी फाइलें प्राप्त कर सकता हूं लेकिन जब मैं उन्हें स्थानांतरित करने का प्रयास करता हूं तो मुझे java.nio.file.AccessDeniedException मिलता है।मैं एक फ़ाइल को एक गैर-खाली निर्देशिका में कैसे स्थानांतरित कर सकता हूं?

यदि मैं उन्हें कॉपी करने का प्रयास करता हूं, तो मुझे DirectoryNotEmptyException मिलता है। मुझे Google पर कोई मदद नहीं मिली है। मुझे यकीन है कि फ़ाइल को एक निर्देशिका से दूसरी निर्देशिका में स्थानांतरित करने का एक आसान तरीका होना चाहिए, लेकिन मैं इसे समझ नहीं सकता।

private static void findMatchingPdf(Path file, ArrayList cgbaFiles) { 
    Iterator iter = cgbaFiles.iterator(); 
    String pdfOfFile = file.getFileName().toString().substring(0, file.getFileName().toString().length() - 5) + ".pdf"; 
    while (iter.hasNext()){ 
     Path cgbaFile = (Path) iter.next(); 
     if (cgbaFile.getFileName().toString().equals(pdfOfFile)) { 
      try { 
       Files.move(file, cgbaFile.getParent(), StandardCopyOption.REPLACE_EXISTING); 
      } catch (IOException ex) { 
       ex.printStackTrace(); 
      } 
     } 
    } 
} 

मैं फ़ाइलों की एक सूची के माध्यम से पुनरावृत्ति कर रहा हूँ, एक ही नाम का पीडीएफ़ के साथ एक .meta फ़ाइल से मेल करने की कोशिश कर रहा:

यह मुझे लगता है कि क्या कोशिश कर रहा हूँ है DirectoryNotEmptyException हो जाता है। एक बार जब मुझे मैच मिल जाए, तो मैं मेटाडेटा फ़ाइल को उस निर्देशिका में ले जाता हूं जिसमें पीडीएफ है।

मैं इस अपवाद: java.nio.file.DirectoryNotEmptyException: C: \ test \ CGBA-आरएसी \ भाग- एक sun.nio.fs.WindowsFileCopy.move (WindowsFileCopy.java:372) पर पर sun.nio.fs.WindowsFileSystemProvider.move (WindowsFileSystemProvider.java:287) java.nio.file.Files.move (Files.java:1347) cgba.rac.errorprocessor.ErrorProcessor.findMatchingPdf (ErrorProcessor.java: 149) cgba.rac.errorprocessor.ErrorProcessor.matchErrorFile (ErrorProcessor.java:81) cgba.rac.errorprocessor.ErrorProcessor.main पर पर (ErrorProcessor.java:36)

+0

मैं अपने ओपी में कुछ कोड संपादित:

इनमें से एक सही लक्ष्य पथ उत्पन्न करने के लिए चाहिए। – user2406854

+0

संभावित डुप्लिकेट [जावा 7 में किसी निर्देशिका में फ़ाइल की प्रतिलिपि कैसे करें] (http://stackoverflow.com/questions/19694471/how-to-copy-a-file-to-a-directory-in-java- 7) – naXa

उत्तर

11
Files.move(file, cgbaFile.getParent(), StandardCopyOption.REPLACE_EXISTING); 

लक्ष्य के लिए नई फ़ाइलें वर्ग इस्तेमाल कभी नहीं किया है, तो आप निर्देशिका आप में फ़ाइल ले जाना चाहते हैं प्रदान कर रहे हैं। यह गलत है। लक्ष्य नया पथनाम होना चाहिए जिसे आप फ़ाइल चाहते हैं - नई निर्देशिका और फ़ाइल नाम।

उदाहरण के लिए, मान लीजिए कि आप /tmp/foo.txt को /var/tmp निर्देशिका में ले जाना चाहते थे। आप पर कॉल कर रहे हैं जब आपको Files.move("/tmp/foo.txt", "/var/tmp/foo.txt") पर कॉल करना चाहिए।

आपको वह विशिष्ट त्रुटि मिल रही है क्योंकि JVM फ़ाइल के साथ इसे बदलने के लिए लक्ष्य निर्देशिका को हटाने का प्रयास कर रहा है।

Path target = cgbaFile.resolveSibling(file.getFileName()); 

Path target = cgbaFile.getParent().resolve(file.getFileName()); 
+0

धन्यवाद, यह अब तक का सबसे स्पष्ट स्पष्टीकरण था। – user2406854

3
Path source = Paths.get("Var"); 
Path target = Paths.get("Fot", "Var"); 
try { 
    Files.move(
     source, 
     target, 
     StandardCopyOption.REPLACE_EXISTING); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

java.nio.file.Files एक आवश्यकता है, इसलिए यहां संपादित समाधान है। कृपया देखें कि क्या यह काम करता है coz मैं पहले

संबंधित मुद्दे

 संबंधित मुद्दे