尝试将文件列表添加到Jlist,然后过滤JList中的文件,只返回.txt文件和固定字符长度。还尝试删除返回的文件路径,并仅在文件的JList中显示文件名+扩展名。
到目前为止,除了删除文件路径外,完成了所有操作。 例如,它仍然在JList中返回“C:\ java_help.txt”而不是“java_help.txt”。
import javax.swing.*;
import java.io.*;
public class FileName extends JFrame{
JPanel pnl=new JPanel();
public static void main (String[]args) {
FileName print=new FileName();
}
JList list;
@SuppressWarnings("unchecked")
public FileName() {
super("Swing Window");
setSize(250,300);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
add(pnl);
String path="C:/";
File folder=new File(path);
File[]listOfFiles=folder.listFiles(new TextFileFilter());
list=new JList(listOfFiles);
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
list.setLayoutOrientation(JList.VERTICAL);
pnl.add(list);
pnl.revalidate();
}
}
class TextFileFilter implements FileFilter {
public boolean accept(File file) {
String name=file.getName();
return name.length()<28&&name.endsWith(".txt");
}
}
我认为getName()应该可以实现这一点,但似乎并非如此。如何从文件名中删除路径,并在JList中只保留文件名+扩展名?上述代码的适用示例将不胜感激。
答案 0 :(得分:1)
我认为这里的问题不是您拥有的代码:文件过滤器看起来没问题。我认为您的投诉是文本在JList
。
您需要实施ListCellRender
来更改显示文字。
请参阅JList tutorial了解如何执行此操作。
答案 1 :(得分:0)
获取返回值并执行
String[] PartsOfPath = ReturnedPath.split("\");
String JustFileName = PartsOfPath[(PartsOfPath.length - 1)];
我还没有测试过,但我认为这应该有效。显然需要与你需要的变量名称交换。
答案 2 :(得分:0)
由于您在路径中使用了“C:”,我认为您已经在Windows上并想要一些适用于Windows的东西。
修剪路径:
String name=file.getName();
name = name.substring(name.lastIndexOf('\\'));
// ...
这将删除路径,只留下文件名。
显然,它不会在Linux上工作。如果你需要它,你可以切换你正在寻找的角色。在Windows上,这可行。
答案 3 :(得分:0)
问题是accept()
课程中的方法TextFileFilter
。
你的回程线有问题,我不完全确定你在那里做什么。您似乎正在尝试返回该名称。
对我来说,这可以按预期工作:
import java.io.File;
public class Test {
public static void main(String[] args) {
File f = new File("C:\\bell.wav");
System.out.println(f.getName());
}
}
打印:bell.wav
如果File
不适合您,请尝试使用Paths
。
import java.nio.file.Path;
import java.nio.file.Paths;
public class Test {
public static void main(String[] args) {
Path p = Paths.get("C:\\bell.wav");
System.out.println(p.getFileName());
}
}
打印:bell.wav
答案 4 :(得分:0)
这样可行,但您只获取String而不是File对象。请注意,如果替换“C:\”,则在需要检索File对象时,文件路径将不再有效。所以你只需要一个文件名列表而不是File对象。这可能是“C:\”最初留在那里的原因。
String path = "C:/";
File folder = new File(path);
File[] listOfFiles = folder.listFiles(new TextFileFilter());
List<String> fileNames = new ArrayList<String>();
for (File f: listOfFiles) {
fileNames.add(f.getName().replace(path, ""));
}
list = new JList(fileNames.toArray());
答案 5 :(得分:0)
这里有一个ListCellRenderer的简单实现wolfcastle建议你做你想做的事:
class SimpleFileCellRenderer extends DefaultListCellRenderer implements ListCellRenderer<Object>
{
// Use this to show relative paths instead of absolute.
@Override
public Component getListCellRendererComponent(
JList<? extends Object> list, Object value, int index,
boolean isSelected, boolean cellHasFocus) {
Path relative = ((File) value).toPath().getFileName();
return super.getListCellRendererComponent(list, relative, index, isSelected, cellHasFocus);
}
}
只需调用JList.setCellRenderer(new SimpleFileCellRenderer());你应该被设定。