web-dev-qa-db-de.com

Letztes Änderungsdatum der Dateien in einem Verzeichnis abrufen

Ich habe Probleme beim Anzeigen des aktuell geänderten Datums. 

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;
    }
}

Ab sofort wird nur das letzte Änderungsdatum des Verzeichnisses in allen Dateien angezeigt. Jede Hilfe wäre sehr dankbar!

8
user2250122

In Ihrer Frage zeigen Sie auf ein Verzeichnis, nicht auf eine Datei.

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);

Die Idee ist, ein Verzeichnis zu erhalten und die Suche nach dem Datum der letzten Änderung aller Dateien zu wiederholen. Die folgende Frage kann hilfreich sein: Wie erhält man mit Java nur 10 zuletzt geänderte Dateien aus dem Verzeichnis?

EDIT 1:

Meine knifflige Lösung: 

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:

Für Ihren Fall wäre dies hilfreich:

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;
        }

    }); 
}   

// Jetzt haben Sie ein Dateiliste - Array von Dateien. Wenn Sie lastModified-Daten wünschen, können Sie sie wie zuvor von jeder einzelnen Datei abrufen:

  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";
4
Trikaldarshi

Vervollständigen Sie den Code, um das letzte Änderungsdatum zu erhalten 

    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()));
3
Vicky

Ich habe die Antwort von Anonymous Mohit ausprobiert, prüft jedoch nur die Dateigröße der Elemente im Ordner. Was aber, wenn es viele Unterordner gibt? So habe ich es gemacht.

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;
    }
}
0
Omatt

File file = new File(Environment.getExternalStorageDirectory() + dir);

Verweist auf ein Verzeichnis, keine Datei.

Wenn Sie das Änderungsdatum jeder Datei separat in einem Verzeichnis benötigen, verwenden Sie einfach walkfiletree .

Überprüfen Sie this .

0
Boy