Je rencontre des difficultés pour afficher les fichiers en cours de modification.
public class MyAdapter extends ArrayAdapter<String> {
String dir = "/FileDirectory/";
File file = new File(Environment.getExternalStorageDirectory() + dir);
private final Activity context;
Date lastModified = new Date(file.lastModified());
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
String formattedDateString = formatter.format(lastModified);
private String dateFormat = "dd/MM/yyyy HH:mm:ss";
static class ViewHolder {
public TextView text;
}
public MyAdapter(Activity context, String[] date) {
super(context, R.layout.row, date);
this.context = context;
formatter = new SimpleDateFormat(dateFormat);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View rowView = convertView;
if (rowView == null) {
LayoutInflater inflater = context.getLayoutInflater();
rowView = inflater.inflate(R.layout.row, null);
ViewHolder viewHolder = new ViewHolder();
viewHolder.text = (TextView) rowView.findViewById(R.id.FilePath);
rowView.setTag(viewHolder);
}
ViewHolder holder = (ViewHolder) rowView.getTag();
String s = formattedDateString;
holder.text.setText(s);
return rowView;
}
}
À partir de maintenant, il affiche simplement la date de dernière modification du répertoire sur tous les fichiers. Toute aide serait grandement appréciée!
Dans votre question, vous pointez un répertoire, pas un fichier.
File file = new File(Environment.getExternalStorageDirectory() + dir);
private final Activity context;
Date lastModified = new Date(file.lastModified());
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
String formattedDateString = formatter.format(lastModified);
L'idée est d'obtenir un répertoire et d'effectuer une itération en recherchant la date de dernière modification de tous les fichiers. La question suivante peut aider: Comment obtenir seulement les 10 derniers fichiers modifiés du répertoire en utilisant Java?
EDIT 1:
Ma solution délicate:
File images = new File("YourDirectoryPath");
long[] fileModifieDate = new long[images.listFiles().length];
int i=0;
File[] imagelist = images.listFiles(new FilenameFilter()
{
public boolean accept(File dir, String name)
{
File file = new File(dir, name);
fileModifieDate[i++] = file.lastModified();
return true;
}
});
// Here, max is the last modified date for this directory
// Here, Long array **fileModifieDate** will give modified time of all files, which you can also access from Files array
// if you want the last modified file in the directory you can do this:
File[] maxModifiedDate = images.listFiles(new FilenameFilter()
{
public boolean accept(File dir, String name)
{
File file = new File(dir, name);
return file.lastModified() == max;
}
});
// Now **maxModifiedDate** File array will have only one File, which will have max modified date.
EDIT 2:
Pour votre cas, cela serait utile:
public class MyAdapter extends ArrayAdapter<String> {
String dir = "/FileDirectory/";
File myFolder= new File(Environment.getExternalStorageDirectory() + dir);
if(myFolder.exists()){
File[] filelist = myFolder.listFiles(new FilenameFilter()
{
public boolean accept(File dir, String name)
{
return true;
}
});
}
// Vous avez maintenant un filelist array of Files. Si vous voulez les données lastModified, vous pouvez extraire chaque fichier individuellement comme vous le faisiez précédemment:
private final Activity context;
Date lastModified = new Date(file.lastModified());
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
String formattedDateString = formatter.format(lastModified);
private String dateFormat = "dd/MM/yyyy HH:mm:ss";
Code complet pour obtenir la dernière date de modification
File file = new File("c:\\test\\myfile.txt");
SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss");
System.out.println("Modified Date :- " + sdf.format(file.lastModified()));
J'ai essayé la réponse de Anonymous Mohit, mais cela ne fait que vérifier la taille du fichier des éléments à l'intérieur du dossier. Mais que se passe-t-il s'il y a beaucoup de sous-dossiers? Voici comment je l'ai fait.
public static long lastModifiedDate;
public static long getLastModified(String path) {
File directory = new File(path);
File[] files = directory.listFiles();
if(GlobalValues.DEBUG) Log.i(TAG, "Get last modified date: " + path);
if (files.length == 0) return directory.lastModified();
else {
for(File filesInFolder: files) {
if(filesInFolder.isDirectory()) {
getLastModified(filesInFolder.getAbsolutePath());
} else {
if(lastModifiedDate == 0) {
lastModifiedDate = filesInFolder.lastModified();
} else{
if(filesInFolder.lastModified() >= lastModifiedDate){
lastModifiedDate = filesInFolder.lastModified();
}
}
}
}
return lastModifiedDate;
}
}
File file = new File(Environment.getExternalStorageDirectory() + dir);
Pointe sur le répertoire, pas un fichier.
Si vous avez besoin de modifier la date de chaque fichier séparément dans un répertoire, utilisez simplement walkfiletree .
Vérifiez this .