2012-01-03 12 views
7

में .txt विस्तार जोड़ मैं एक विधि है कि एक JTextArea से पाठ मिलता है, एक फाइल बना सकते हैं और नीचे दिए गए कोड के रूप में इस पर पाठ लिखने:JFileChooser

public void createTxt() { 

    TxtFilter txt = new TxtFilter(); 

    JFileChooser fSave = new JFileChooser(); 

    fSave.setFileFilter(txt); 
    int result = fSave.showSaveDialog(this); 
    if(result == JFileChooser.APPROVE_OPTION) { 
     File sFile = fSave.getSelectedFile(); 
     FileFilter selectedFilter = fSave.getFileFilter(); 

     String file_name = sFile.getName(); 
     String file_path = sFile.getParent(); 

     try{ 
      if(!sFile.exists()) { 
       sFile.createNewFile(); 
       BufferedWriter out = new BufferedWriter(new FileWriter(sFile)); 
       out.write(jTextArea1.getText()); 
       out.close(); 
       JOptionPane.showMessageDialog(null, "Warning file • " + file_name + " • created succesfully in \n" + file_path);  
      } else { 
       String message = "File • " + file_name + " • already exist in \n" + file_path + ":\n" + "Do you want to overwrite?"; 
       String title = "Warning"; 
       int reply = JOptionPane.showConfirmDialog(null, message, title, JOptionPane.YES_NO_OPTION); 
       if(reply == JOptionPane.YES_OPTION){ 
        sFile.delete(); 
        sFile.createNewFile(); 
        BufferedWriter out = new BufferedWriter(new FileWriter(sFile)); 
        out.write(jTextArea1.getText()); 
        out.close(); 
        JOptionPane.showMessageDialog(null, "File • " + file_name + " • overwritten succesfully in \n" + file_path); 

       } 
      } 
     } 
     catch(IOException e) { 
      System.out.println("Error"); 
     } 
    } 
} 

और एक txt फ़ाइल फिल्टर

public class TxtFilter extends FileFilter{ 
    @Override 
    public boolean accept(File f){ 
     return f.getName().toLowerCase().endsWith(".txt")||f.isDirectory(); 
    } 
    @Override 
    public String getDescription(){ 
     return "Text files (*.txt)"; 
    } 
} 

txt के लिए फ़ाइल फ़िल्टर ठीक काम करता है लेकिन जब मैं फ़ाइल नाम टाइप करता हूं तो ".txt" एक्सटेंशन जोड़ना चाहता हूं।

मुझे अपने कोड को कैसे संशोधित करना है?

JFileChooser fS = new JFileChooser(); 
String fileExt = ".txt"; 
addFileExtIfNecessary(fS.getSelectedFile().getName(),fileExt) 

उत्तर

5

अद्यतन

तुम मुझे बताया:

/** 
* Add extension to a file that doesn't have yet an extension 
* this method is useful to automatically add an extension in the savefileDialog control 
* @param file file to check 
* @param ext extension to add 
* @return file with extension (e.g. 'test.doc') 
*/ 
private String addFileExtIfNecessary(String file,String ext) { 
    if(file.lastIndexOf('.') == -1) 
     file += ext; 

    return file; 
} 

तो फिर तुम इस तरह से उदाहरण के लिए समारोह का उपयोग कर सकते हैं:

+0

यह काम नहीं करता है .. कोई एक्सटेंशन नहीं जोड़ा –

+0

बहुत अजीब! मेरे सिस्टम पर सबकुछ काम करता है..मैंने जवाब संपादित किया। –

+1

आपके उपयोगी इंफोस के लिए बहुत बहुत धन्यवाद! आप सही हैं मैंने फ़ाइल में दो बार लिखा था, इसके लिए कोई कारण नहीं है। अब फाइलें प्रत्यय के साथ सही ढंग से सहेजी गई हैं ".txt –

1

मैं इस उद्देश्य के लिए इस समारोह किया है बाहर है कि मौजूदा फाइलों के लिए जांच काम नहीं करता है। मुझे खेद है, मैंने यह नहीं सोचा जब मैंने आपको BufferedWriter लाइन को प्रतिस्थापित करने का सुझाव दिया था। अब, यह बदल देते हैं: साथ

File sFile = fSave.getSelectedFile(); 

:

File sFile = new File(fSave.getSelectedFile()+".txt"); 
इस प्रतिस्थापन के साथ

, यह अब BufferedWriter की लाइन को बदलने के लिए की जरूरत नहीं है, विस्तार के लिए .txt जोड़ने। फिर, आपके द्वारा पोस्ट किए गए कोड में लाइन के साथ उस पंक्ति को प्रतिस्थापित करें (के बजाय BufferedWriter out = new BufferedWriter(new FileWriter(sFile)); के साथ)।

अब कार्यक्रम अपेक्षा के अनुसार काम करना चाहिए।

sFile.createNewFile(); 

इस तरह, आप एक खाली फ़ाइल बना रहे हैं, वर्ग File साथ:

मैं तुम्हें लाइन टिप्पणी करने के लिए है कि उल्लेख करना भूल गया।

बस इस लाइन के बाद, BufferedWriter out = new BufferedWriter(new FileWriter(sFile)); है। इस लाइन के साथ, आप एक ही फाइल बना रहे हैं। लेखन प्रक्रिया दो बार हो रही है! मुझे लगता है कि एक ही कार्य कर रहे दो निर्देशों को सम्मिलित करना बेकार है।

इसके अलावा, BufferedWriter निर्माता पर, आप फ़ाइल नाम के लिए एक स्ट्रिंग जोड़ सकते हैं (यह File निर्माता पर संभव नहीं है), यही कारण है कि मैं क्यों sFile करने के लिए +".txt" (एक्सटेंशन) जोड़ा है।

+0

धन्यवाद, लेकिन मैं अपवाद रन की है।NullPointerException \t provgrafica.ProvaFramePop.createTxt (ProvaFramePop.java:145) –

+2

यदि फ़ाइल नाम में "।" है तो यह विफल नहीं होगा? – thomasa88

17

मैं बस का उपयोग इस

File fileToBeSaved = fileChooser.getSelectedFile(); 

if(!fileChooser.getSelectedFile().getAbsolutePath().endsWith(suffix)){ 
    fileToBeSaved = new File(fileChooser.getSelectedFile() + suffix); 
} 
3

यह मेरा प्रोग्राम हैं जो आपको JFileChooser.getSelectedFile के बजाय का उपयोग कर सकते, विस्तार भी प्राप्त करने के लिए में से एक से एक उपयोगिता कार्य है। सूत्र "AWT-EventQueue-0" java.lang में अपवाद:

/** 
* Returns the selected file from a JFileChooser, including the extension from 
* the file filter. 
*/ 
public static File getSelectedFileWithExtension(JFileChooser c) { 
    File file = c.getSelectedFile(); 
    if (c.getFileFilter() instanceof FileNameExtensionFilter) { 
     String[] exts = ((FileNameExtensionFilter)c.getFileFilter()).getExtensions(); 
     String nameLower = file.getName().toLowerCase(); 
     for (String ext : exts) { // check if it already has a valid extension 
      if (nameLower.endsWith('.' + ext.toLowerCase())) { 
       return file; // if yes, return as-is 
      } 
     } 
     // if not, append the first extension from the selected filter 
     file = new File(file.toString() + '.' + exts[0]); 
    } 
    return file; 
} 
संबंधित मुद्दे