我的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播放列表。
答案 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
),然后使用正则表达式检查该行是否是路径/文件名组合。不执行进一步的检查,并且假设路径/文件名有效,因为它可能来自外部应用程序。我的意思是正则表达式不会检查路径/文件名中的无效字符,也不会检查文件是否存在,尽管添加它是微不足道的。