0

基本的に、Java で文字列のコレクションを返そうとしています。しかし...

  • 現在のフォルダー内のすべての「.db」ファイルの名前であるため、各文字列は一意である必要があるため、このコレクションは LinkedHashSet である必要があると考えました。
  • 要素 (ファイル名) はまったく同じ順序を維持する必要があるため、コレクション内の順序番号によってそのうちの 1 つを選択できます。

メイン ルーチンは、このコレクションを GUI コンポーネント (おそらく JList) に表示し、ユーザーがそれらのいずれかを選択できるようにします (.db 拡張子なし)。私は完全に初心者なので (ご覧のとおり)、LinkedHashSet よりも優れたオプションがあると思われる場合は教えてください。

また、メインクラスでこのコレクションを取得するにはどうすればよいですか?

私がこれまでに持っているもの:

    public Set GetDBFilesList() {

    //returns ORDERED collection of UNIQUE strings with db filenames

    LinkedHashSet a = new LinkedHashSet();

    FilenameFilter dbFilter = (File file, String name) -> {
        return name.toLowerCase().endsWith(".db");
    };

    String dirPath = "";
    File dir = new File(dirPath);
    File[] files = dir.listFiles(dbFilter);

    if (files.length > 0) {
        for (File aFile : files) {
            a.add(aFile.getName());
        }
    }

    return a;
}
4

1 に答える 1

0

順序付けられた一意のコレクションが必要な場合 - LinkedHashSet は適切な選択です。メソッドに関するいくつかのコメント:

  • Generics fe:LinkedHashSet<File>またはを使用する必要がありますLinkedHashSet<String>
  • のチェックfiles.lengthは不要ですが、I/O エラーが発生していないnullかどうかを確認できます。pathdirectory
  • 変数に適切な名前を付ける必要があります:aは適切な名前ではありません
  • あなたのメソッドはstatic、おそらく静的ヘルパークラスにある可能性がありますか?
  • Set.addメソッドreturns trueまたはfalseアイテムが追加されたかどうか、念のため確認する必要があります

すべてをまとめる:

//Your Main class
public class Main
{
   public static void main(String[] args)
   {
       File dir = new File("");
       Collection<File> dbFiles = DbFileManager.getDatabaseFiles(dir);
   }
}

//Your DB File Reader Logic
public class DbFileManager
{
   public static Collection<File> getDatabaseFiles(File directory)
   {
        Collection<File> dbFiles = new LinkedHashSet<>();
        //filter code etc.
        boolean success = dbFiles.addAll(directory.listFiles(filter));
        //Check if everthing was added
        return dbFiles;
   }
}
于 2016-08-09T13:17:34.007 に答える