2008-08-28 12 views
19

मैं अपने उपयोगकर्ताओं को निर्देशिका और इसकी उप निर्देशिकाओं तक सीमित करना चाहता हूं लेकिन "अभिभावक निर्देशिका" बटन उन्हें मनमाने ढंग से निर्देशिका में ब्राउज़ करने की अनुमति देता है।मैं JFileChooser को निर्देशिका में कैसे प्रतिबंधित करूं?

मुझे ऐसा करने के लिए कैसे जाना चाहिए?

उत्तर

10

आप शायद अपना खुद का FileSystemView सेट करके ऐसा कर सकते हैं।

+0

अधिक संदर्भ कैसे (उदाहरण के लिए करने के लिए सौंपने के लिए) यदि आप डिफ़ॉल्ट filesystemview मिलता है पढ़ सकते हैं की तरह एक JFileChooser का चयन मोड सेट कर सकते हैं? –

+1

@ जेसन एस - संभवतः स्थिर विधि 'getFileSystemView() ' – McDowell

+0

के माध्यम से अगर किसी को इसकी आवश्यकता हो, तो ओपी क्या चाहता था इसका एक सटीक उदाहरण है: http://tips4java.wordpress.com/2009/01/28/single -root-file-chooser/ –

20

बैठाना किसी और भविष्य में इस की जरूरत है:

class DirectoryRestrictedFileSystemView extends FileSystemView 
{ 
    private final File[] rootDirectories; 

    DirectoryRestrictedFileSystemView(File rootDirectory) 
    { 
     this.rootDirectories = new File[] {rootDirectory}; 
    } 

    DirectoryRestrictedFileSystemView(File[] rootDirectories) 
    { 
     this.rootDirectories = rootDirectories; 
    } 

    @Override 
    public File createNewFolder(File containingDir) throws IOException 
    {  
     throw new UnsupportedOperationException("Unable to create directory"); 
    } 

    @Override 
    public File[] getRoots() 
    { 
     return rootDirectories; 
    } 

    @Override 
    public boolean isRoot(File file) 
    { 
     for (File root : rootDirectories) { 
      if (root.equals(file)) { 
       return true; 
      } 
     } 
     return false; 
    } 
} 

आप स्पष्ट रूप से एक बेहतर "createNewFolder" विधि बनाने की आवश्यकता होगी, लेकिन यह अधिक निर्देशिका में से एक करने के लिए उपयोगकर्ता को प्रतिबंधित करता है।

और इस तरह इसका इस्तेमाल:

FileSystemView fsv = new DirectoryRestrictedFileSystemView(new File("X:\\")); 
JFileChooser fileChooser = new JFileChooser(fsv); 

या इस तरह:

FileSystemView fsv = new DirectoryRestrictedFileSystemView(new File[] { 
    new File("X:\\"), 
    new File("Y:\\") 
}); 
JFileChooser fileChooser = new JFileChooser(fsv); 
+0

काम नहीं करता @Allain –

5

Allain के समाधान के लगभग पूरा हो गया है। तीन समस्याओं का समाधान के लिए खुले हैं:

  • शुरू बिंदु रूट न

    1. क्लिक करने से "घर" -Button प्रतिबंध से बाहर उपयोगकर्ता किक
    2. DirectoryRestrictedFileSystemView पैकेज के बाहर से सुलभ नहीं है

    1. निर्देशिका में @ ओवरराइड को शामिल करें RestrictedFileSystemView

    public TFile getHomeDirectory() { return rootDirectories[0]; }

    1. सेट वर्ग और निर्माता public

    2. बदलें JFileChooser fileChooser = new JFileChooser(fsv); में JFileChooser fileChooser = new JFileChooser(fsv.getHomeDirectory(),fsv);

    मैं उन प्रतिबंधित करने के लिए इसका इस्तेमाल करते हैं TrueZips TFileChooser और द्वारा ज़िप-फाइल में रहने के लिए उपरोक्त कोड में मामूली संशोधन के साथ, यह पूरी तरह से काम करता है। बहुत बहुत धन्यवाद।

  • -1

    जटिल होने की कोई आवश्यकता नहीं है। आप आसानी से इस

    JFileChooser fc = new JFileChooser(); 
    fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 
    fc.setMultiSelectionEnabled(false); 
    

    आप यहाँ How to Use File Choosers

    +1

    यह उन्हें सामान्य रूप से निर्देशिकाओं तक सीमित करता है, लेकिन एक विशिष्ट निर्देशिका के लिए नहीं, जो ओपी का सवाल है। –

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