使用JFileChooser将JTextArea中的某些文本保存到文件中

时间:2014-01-06 03:59:43

标签: java jtextarea jfilechooser

我的JTextArea

中有此文字
Getting all .mp3 files in C:\Users\Admin\Music including those in subdirectories

C:\Users\Admin\Music\Sample Music\Kalimba.mp3
C:\Users\Admin\Music\Sample Music\Maid with the Flaxen Hair.mp3
C:\Users\Admin\Music\Sample Music\Sleep Away.mp3

Finished Searching...

我只想保存这部分:

C:\Users\Admin\Music\Sample Music\Kalimba.mp3
C:\Users\Admin\Music\Sample Music\Maid with the Flaxen Hair.mp3
C:\Users\Admin\Music\Sample Music\Sleep Away.mp3

不幸的是我不能使用下面的代码:

JFileChooser saveFile = new JFileChooser("./");  
int returnVal = saveFile.showSaveDialog(this);  
File file = saveFile.getSelectedFile();  
BufferedWriter writer = null;  
if (returnVal == JFileChooser.APPROVE_OPTION)  
{  
    try {  
    writer = new BufferedWriter( new FileWriter( file.getAbsolutePath()+".txt")); // txt for now but needs to be m3u 
    searchMP3Results.write(writer); // using JTextArea built-in writer
    writer.close( );  
    JOptionPane.showMessageDialog(this, "Search results have been saved!",  
                "Success", JOptionPane.INFORMATION_MESSAGE);  
    }  
    catch (IOException e) {  
    JOptionPane.showMessageDialog(this, "An error has occured",  
                "Failed", JOptionPane.INFORMATION_MESSAGE);  
    }  
}

使用上面的代码,它可以保存JTextArea中的所有内容。你能救我吗?

P.S。如果可能,我想将其保存为M3U播放列表。

1 个答案:

答案 0 :(得分:0)

我假设searchMP3Results是包含文字的JTextArea。在这种情况下,您可以使用String将文本作为searchMP3Results.getText()获取,并通过查找文件路径的正则表达式运行结果。 Windows路径的示例正则表达式就是这个问题java regular expression to match file path。不幸的是,这会将您的应用程序与Windows联系起来,但如果这是可以接受的,那么您应该更好,否则您应该使用系统属性检测操作系统并选择正确的正则表达式。

就m3u而言,您应该只能导出目录路径(每行一个)。扩展的m3u文件(使用标题#EXTM3U)需要其他信息,但您应该可以使用简单版本。

更新:添加了代码 更新2:将正则表达式更改为路径正则表达式(副文件)的修改版本,现在针对每一行运行它而不是执行多行评估

String text = searchMP3Results.getText();
StringBuilder output = new StringBuilder();
for ( String s : text.split("\n") ) {
    if ( java.util.regex.Pattern.matches("^([a-zA-Z]:)?(\\\\[\\s\\.a-zA-Z0-9_-]+)+\\\\?$", s) ) {
        output.append(s).append("\n");
    }
}

此代码将输入拆分为一个行数组(您可能希望使用\r\n而不是\n),然后使用正则表达式检查该行是否是路径/文件名组合。不执行进一步的检查,并且假设路径/文件名有效,因为它可能来自外部应用程序。我的意思是正则表达式不会检查路径/文件名中的无效字符,也不会检查文件是否存在,尽管添加它是微不足道的。