我有一个JFileChooser(此处未显示),它接受用户文件Input。我想确保用户只输入.txt文件。是否有可用的功能允许使用JFileChooser或其他可能的解决方案进行验证。我考虑过以下几点:
if (selectedFile != null && selectedFile.getName().endsWith(".txt")){
//action
} else {
JOptionPane.showMessageDialog(null, "You have not selected a .txt file. Please choose a correct file type to continue.);
}
但是,如果可能,我希望它是这样的情况,即使文件没有明确地以名称中的.txt结尾,它仍然会被接受,但它仍然必须是文本文件。 / p>
答案 0 :(得分:1)
回答,如何检测文件是否真的是.txt文件,你可以使用Apache Tika库
public static void main(String[] sss) {
try {
// System.out.println(ContainsMedia(new File("D:\\test")));
Tika tika = new Tika();
String contentTypeDetected = "";
File dir = new File("D:\\test");
for (String dir2 : dir.list()) {
try {
contentTypeDetected = tika.detect(new File(dir,dir2));
System.out.println(contentTypeDetected);
} catch (IOException e) {
e.printStackTrace();
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
输出:文本/无格式 即使该目录中的文件是文本文件,但我将其重命名为.exe文件和.rar文件,但apache tikka说实话 在这里下载是jar的链接,在下载Apache tikka homepage
后将它添加到你的类路径中其次,如果你想让他只选择txt文件类型,你可以
fileChooser.setFileFilter(new FileFilter() {
@Override
public boolean accept(File f) {
if (f.isDirectory())
return true;
String name = f.getName().toLowerCase();
return name.endsWith(".txt")
;
}
@Override
public String getDescription() {
return "only text file";
}
});
答案 1 :(得分:0)
请参阅JavaDoc以使用FileFilter和JFileChooser。
您需要实现自定义FileFilter,它不仅会检查文件扩展名,还会检查文件内容是否为文本。
答案 2 :(得分:0)
是的,这是可能的
JFileChooser提供您需要的一切
例如:
jfc.setAcceptAllFileFilterUsed(false);
jfc.setFileFilter(new FileFilter()
{
@Override
public String getDescription()
{ return "*" + fileExtension; }
@Override
public boolean accept(File f)
{
return f.isDirectory() || f.getName().toLowerCase().endsWith(fileExtension));
}
});
(jfc是之前创建的JFileChooser对象。)
这是一个非常简单的例子
如您所见,您必须添加一个新的FileFilter来解决您的问题
这个Object有一个名为“accept”的方法,它只返回一个布尔值
(是否是“有效档案”。)
但是你应该检查Java文档中的所有可能性。
或者使用Oracle提供的这些教程:
http://docs.oracle.com/javase/tutorial/uiswing/components/filechooser.html
顺便说一下。您无法确保所选文件仅包含文本 之后你必须检查一下。
祝你好运!