2012-09-21 23 views
0

我使用的文件輸入流中輸入一個文件使用JFileChooser,以讀取一個文件名


String filename="D:\\abc.txt"; 
File file = new File(filename); 

它正常工作,直至現在。現在我想用JFileChooser輸入文件名,然後執行相同的操作。但JFileChooser返回一個像這樣的字符串D:\abc.txt。我的代碼如下


public static String fileChose() 
{ 
    JFileChooser fc= new JFileChooser(); 
    int ret = fc.showOpenDialog(null); 

    if (ret== JFileChooser.APPROVE_OPTION) 
    { 
     File file = fc.getSelectedFile(); 
     String filename= file.getAbsolutePath(); 
     return filename; 
    } 
    else 
     return null; 
} 

的問題是需要通過\\而不是\分開的文件名。我不能直接輸入這樣的方式從JFileChooser的文件名,從而直接在


File file = new File(Classname.fileChose()); 
+0

你聲明的字符串 「d:\\的abc.txt」 是相同的字符串爲 「d:\的abc.txt」,由該方法返回的字符串,因爲'\ '是一個轉義字符,所以在代碼中'\\'實際上是'\'。這樣說,我很難辨別你的問題是什麼。 – Vulcan

+0

我知道這是一個轉義字符。但File中的參數要求使用\\格式而不是\。所以我想知道該格式的文件路徑是否可以直接執行? – OneMoreError

+2

我同意Vulcan,但更重要的是,爲什麼不更改方法來返回'文件'本身而不是文件名?像'File file = fc.getSelectedFile(); return file;'你反正把它做成一個文件 –

回答

0

使用它作爲參數嘗試

if (code == JFileChooser.APPROVE_OPTION) { 
       File selectedFile = chooser.getSelectedFile(); 
       fileName = selectedFile.getName(); 
       FileInputStream fis = 
        new FileInputStream(selectedFile); 
       InputStreamReader in = 
        new InputStreamReader(fis, Charset.forName("UTF-8")); 
       char[] buffer = new char[1024]; 
       int n = in.read(buffer); 
       String text = new String(buffer, 0, n); 
       myPane.setText(text); 
       in.close(); 
      } 

演示:

public class JEditorPaneFileChooser implements ActionListener { 
    JFrame myFrame = null; 
    JEditorPane myPane = null; 
    JMenuItem cmdOpen = null; 
    JMenuItem cmdSave = null; 
    String dirName = "\\herong\\swing\\"; 
    String fileName = "JEditorPane.txt"; 

    public static void main(String[] a) { 
     (new JEditorPaneFileChooser()).test(); 
    } 
    private void test() { 
     myFrame = new JFrame("JEditorPane JFileChooser Test"); 
     myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     myFrame.setSize(300,200); 

     myPane = new JEditorPane(); 
     myPane.setContentType("text/plain"); 
     myPane.setText(
     "Hello computer! - \u7535\u8111\u4F60\u597D\uFF01\n" 
     + "Welcome to Herong's Website!\n" 
     + "\u6B22\u8FCE\u4F60\u8BBF\u95EE\u548C\u8363\u7F51\u7AD9" 
     + "\uFF01\nwww.herongyang.com"); 
     myFrame.setContentPane(myPane); 

     JMenuBar myBar = new JMenuBar(); 
     JMenu myMenu = getFileMenu(); 
     myBar.add(myMenu); 
     myFrame.setJMenuBar(myBar); 

     myFrame.setVisible(true); 
    } 
    private JMenu getFileMenu() { 
     JMenu myMenu = new JMenu("File"); 
     cmdOpen = new JMenuItem("Open"); 
     cmdOpen.addActionListener(this); 
     myMenu.add(cmdOpen); 

     cmdSave = new JMenuItem("Save"); 
     cmdSave.addActionListener(this); 
     myMenu.add(cmdSave); 
     return myMenu; 
    } 
    public void actionPerformed(ActionEvent e) { 
     JFileChooser chooser = new JFileChooser(); 
     chooser.setCurrentDirectory(new File(dirName)); 
     chooser.setSelectedFile(new File(fileName)); 
     chooser.setFileSelectionMode(JFileChooser.FILES_ONLY); 

     FileNameExtensionFilter filter = new FileNameExtensionFilter(
     ".txt and .java files", "txt", "java"); 
     chooser.setFileFilter(filter); 

     Object cmd = e.getSource(); 
     try { 
     if (cmd == cmdOpen) { 
      int code = chooser.showOpenDialog(myPane); 
      if (code == JFileChooser.APPROVE_OPTION) { 
       File selectedFile = chooser.getSelectedFile(); 
       fileName = selectedFile.getName(); 
       FileInputStream fis = 
        new FileInputStream(selectedFile); 
       InputStreamReader in = 
        new InputStreamReader(fis, Charset.forName("UTF-8")); 
       char[] buffer = new char[1024]; 
       int n = in.read(buffer); 
       String text = new String(buffer, 0, n); 
       myPane.setText(text); 
       in.close(); 
      } 
     } else if (cmd == cmdSave) { 
      int code = chooser.showOpenDialog(myPane); 
      if (code == JFileChooser.APPROVE_OPTION) { 
       File selectedFile = chooser.getSelectedFile(); 
       fileName = selectedFile.getName(); 
       FileOutputStream fos = 
        new FileOutputStream(selectedFile); 
       OutputStreamWriter out = 
        new OutputStreamWriter(fos, Charset.forName("UTF-8")); 
       out.write(myPane.getText()); 
       out.close(); 
      } 
     } 
     } catch (Exception f) { 
     f.printStackTrace(); 
     } 
    } 
} 

enter image description here

編號:http://www.herongyang.com/Swing/JEditorPane-File-Chooser-Dialog-Box.html

1

String s = fileChooser.getSelectedFile()

public String removeExtension(String s) { 

    String separator = System.getProperty("file.separator"); 
    String filename; 

    int lastSeparatorIndex = s.lastIndexOf(separator); 
    if (lastSeparatorIndex == -1) { 
     filename = s; 
    } else { 
     filename = s.substring(lastSeparatorIndex + 1); 
    } 

    int extensionIndex = filename.lastIndexOf("."); 
    if (extensionIndex == -1) 
     return filename; 

    return filename.substring(0, extensionIndex); 
}