ファイルを読み込んだ後にソート処理を行う必要があります。Javaでは、Arrays.sort() や Collections.sort() を使用して簡単にソートできます。
以下に具体的な例を示します:
ファイルを名前順にソートする場合
java
import java.io.File;
import java.util.Arrays;
public void displayFilesSortedByName() {
File directory = new File(mSharedViewModel.mStorageDataPath);
File[] files = directory.listFiles();
if (files != null) {
// ファイル名でソート
Arrays.sort(files, (f1, f2) -> f1.getName().compareToIgnoreCase(f2.getName()));
for (File file : files) {
if (file.isDirectory()) {
Log.d(TAG, "[フォルダ] " + file.getName());
} else if (file.isFile()) {
Log.d(TAG, "[ファイル] " + file.getName());
}
}
}
}
種類別 (フォルダ→ファイルの順) にソートする場合
まず、フォルダを優先して表示し、次にファイルを表示するようにします。
java
import java.io.File;
import java.util.Arrays;
public void displayFilesSortedByType() {
File directory = new File(mSharedViewModel.mStorageDataPath);
File[] files = directory.listFiles();
if (files != null) {
// 種類 (フォルダ優先) でソート
Arrays.sort(files, (f1, f2) -> {
if (f1.isDirectory() && !f2.isDirectory()) {
return -1; // フォルダを先に
} else if (!f1.isDirectory() && f2.isDirectory()) {
return 1; // ファイルを後に
} else {
return f1.getName().compareToIgnoreCase(f2.getName()); // 名前順
}
});
for (File file : files) {
if (file.isDirectory()) {
Log.d(TAG, "[フォルダ] " + file.getName());
} else if (file.isFile()) {
Log.d(TAG, "[ファイル] " + file.getName());
}
}
}
}
拡張子でソートする場合
拡張子を基準にソートし、同じ拡張子の場合はファイル名でソートします。
java
import java.io.File;
import java.util.Arrays;
public void displayFilesSortedByExtension() {
File directory = new File(mSharedViewModel.mStorageDataPath);
File[] files = directory.listFiles();
if (files != null) {
// 拡張子でソート
Arrays.sort(files, (f1, f2) -> {
String ext1 = getFileExtension(f1);
String ext2 = getFileExtension(f2);
int extComparison = ext1.compareToIgnoreCase(ext2);
if (extComparison == 0) {
return f1.getName().compareToIgnoreCase(f2.getName()); // ファイル名でソート
}
return extComparison;
});
for (File file : files) {
if (file.isDirectory()) {
Log.d(TAG, "[フォルダ] " + file.getName());
} else if (file.isFile()) {
Log.d(TAG, "[ファイル] " + file.getName());
}
}
}
}
// 拡張子を取得するヘルパーメソッド
private String getFileExtension(File file) {
String name = file.getName();
int lastDotIndex = name.lastIndexOf('.');
if (lastDotIndex != -1 && lastDotIndex < name.length() - 1) {
return name.substring(lastDotIndex + 1);
}
return ""; // 拡張子なし
}
解説
Arrays.sortの使用:Comparatorを定義してカスタムのソートロジックを記述しています。- ソート基準として名前、種類、拡張子などを指定。
- 複数条件のソート:
- 種類別ソートでは、フォルダとファイルを区別しながら名前順に並べています。
- 拡張子ソートでは、拡張子を比較した後、同じ拡張子内でファイル名順にソート。
- ヘルパーメソッド:
- 拡張子の取得には
getFileExtension()を使用。
- 拡張子の取得には
これで種類別、ファイル名順、拡張子順など柔軟なソートが可能になります



コメント