显示当前(或指定)目录中所有.txt文档的名称

时间:2013-06-28 22:20:39

标签: java directory

所以我有以下代码(已经从教程中无耻地复制,因此我可以对基础进行排序),其中要求玩家加载他们的游戏(基于文本的冒险游戏) 但我需要一种方法来显示目录中所有已保存的游戏。我无需担心当前目录。这是我的代码:

public void load(Player p){
        Sleep s = new Sleep();
        long l = 3000;

        Scanner i = new Scanner(System.in);
        System.out.println("Enter the name of the file you wish to load: ");
        String username = i.next();
        File f = new File(username +".txt");
        if(f.exists()) {
            System.out.println("File found! Loading game....");
            try {
                //information to be read and stored
                String name;
                String pet;
                boolean haspet;

                //Read information that's in text file
                BufferedReader reader = new BufferedReader(new FileReader(f));
                name = reader.readLine();
                pet = reader.readLine();
                haspet = Boolean.parseBoolean(reader.readLine());
                reader.close();

                //Set info
                Player.setUsername(name);
                Player.setPetName(pet);
                Player.setHasPet(haspet);

                //Read the info to player
                System.out.println("Username: "+ p.getUsername());
                s.Delay(l);
                System.out.println("Pet name: "+ p.getPetName());
                s.Delay(l);
                System.out.println("Has a pet: "+ p.isHasPet());

            } catch(Exception e){
                e.printStackTrace();
            }
            }
    }

3 个答案:

答案 0 :(得分:6)

File currentDirectory = new File(currentDirectoryPath);
File[] saveFiles = currentDirectory.listFiles(new FilenameFilter() {
    @Override
    public boolean accept(File dir, String name) {
        return name.toLowerCase().endsWith(".txt");
    }
});

答案 1 :(得分:2)

您可以先获取目录的File对象:

File ourDir = new File("/foo/bar/baz/qux/");

然后通过检查ourDir.isDirectory(),您可以确保不会意外地尝试处理文件。您可以通过回退到另一个名称或抛出异常来处理此问题。

然后,您可以获得一组File个对象:

File[] dirList = ourDir.listFiles();

现在,您可以使用getName()为每个迭代它们并执行您需要的任何操作。

例如:

ArrayList<String> fileNames=new ArrayList<>();
for (int i = 0; i < dirList.length; i++) {
    String curName=dirList[i].getName();
    if(curName.endsWith(".txt"){
        fileNames.add(curName);   
    }
}

答案 2 :(得分:0)

这应该有效:

File folder = new File("path/to/txt/folder");
File[] files = folder.listFiles();
File[] txtFiles = new File[files.length];
int count = 0;

for(File file : files) {
    if(file.getAbsolutePath().endsWith(".txt")) {
        txtFiles[count] = file;
        count++;
    }
}

它应该是非常自我解释的,你只需要知道folder.listFiles()

要减少txtFiles[]数组使用Array.copyOf

File[] finalFiles = Array.copyOf(txtFiles, count);

来自文档:

  

使用false复制指定的数组,截断或填充(如有必要),以使副本具有指定的长度。