2012-10-26 73 views
-1

我最近買了一臺高清電視機,飛利浦47PFL4307H/12是精確的。最後修改訂單以匹配字母順序

我連接到我的USB外置硬盤來觀看我的電影和電視劇集,但文件排序顯然是錯誤的。我聯繫了支持服務,他們告訴我電視列出的文件不是按字母順序排列,而是按最後修改的順序排列。

我是一個Java程序員:我會想要做的是寫的軟件,需要的所有文件夾中,並修改它們與最後修改爲了匹配字母順序排列。

我試着在網上搜索一段已經寫好的軟件,但可能我不知道要使用哪個關鍵詞:我試圖在谷歌上寫下這個問題的相同標題,但沒有,我試過「last -modify英文字母」並沒有什麼..

我的問題是:你知不知道這樣做軟件?如果是的話,你可以指點我嗎? 如果你不知道這個軟件的存在,我該怎麼做才能自己編程呢?我已經知道如何創建一個Java程序,加載和寫入文件,但我不知道的是我必須修改以修改「上次修改時間」的時間戳。更換名字?更改擴展?改變一個屬性(如果是的話)?

謝謝

安德烈

編輯:好吧,我找到了方法 「setLastModified」。不知道它的存在......

現在一個簡單的for循環,問題將不復存在(我希望!)

回答

0

是否File.setLastModified不是你想要的嗎?我個人不想惹這個和搞砸了的數據,但你肯定能按字母順序排序,然後就分配基於一個時間戳(也許開始在2000年1月1日UTC,並添加每個項目的一天,所以將顯示1月1日,1月2日,1月3日等)。

+1

這是我發現同樣的事情的命令。爲什麼這種方法應該搞砸了數據? – Andrea

+0

@Andrea:那麼它會用有效的數據替換*有用的*數據(當你記錄了某些東西),這些數據實際上就是你想要的排序順序。伊克。 –

+0

@jonskeet setLastModified不會更改文件中的數據,它會更改inode。只需複製文件就可以改變這一點。 –

1

好吧,我找到了方法「setLastModified」。不知道它的存在......

現在一個簡單的for循環,問題將不復存在(我希望!)

+0

請添加爲評論 - 不是答案 –

+0

setlastmodified更改文件的修改時間。我想你只是想得到最後修改時間,然後根據它進行排序 –

+0

Bhavik我需要做的事情基本上是:CCCCC.avi(2012年10月修改),BBBBB.avi(2012年9月修改),AAAAAA.avi( 2012年4月修改)成爲:AAAAAAA.avi(10/26/12 10:30),BBBBBB.avi(10/26/12 10:29),CCCCCC.avi(10/26/12 10:28) – Andrea

2

爲什麼不寫一個簡單的shell腳本?

#!/bin/sh 
cd $MY_DIR_OF_VIDEOS 
for i in $(ls); do 
    touch $i 
    sleep 1 
done 

此列出文件(使用ls字母排序)和touch ES每一個(更新它的最後修改日期)。我已添加sleep以確保每個都獲得明確的時間戳。

您可以cron安排此定期運行。

+0

你能解釋我應該在哪裏放這段代碼以及如何執行它?你是在談論一個unix shell嗎?還有什麼其他的嗎? – Andrea

+0

這是一個Unix shell腳本 - 是的,你可能可以使用Cygwin來運行它,我已經修改了上面的代碼作爲獨立的shell腳本。 (創建一個bin目錄?),你可以使用cron或者Windows scheduler來安排它 –

+0

我更喜歡用java程序來做它...我不是一個快樂的unix用戶(我很少使用它) 但是我必須承認這很容易,因爲:) – Andrea

0

那麼,如果想這樣做在Java中,你可以運行DOS命令DIR \ t:W這將顯示與他們的最後修改時間的文件,但那麼你就必須使用大量的字符串函數提取時間。這裏的代碼

public static void main(String[] args) 
{ 
    String[] command = new String[4]; 
    command[0] = "cmd"; 
    command[1] = "/C"; 
    command[2] = "dir \t:w"; 
    command[3] = "c:\\"; 
    Process p; 
    try { 
     p = Runtime.getRuntime().exec(command); 
     BufferedReader stdInput = new BufferedReader(new 
       InputStreamReader(p.getInputStream())); 
      BufferedReader stdError = new BufferedReader(new 
       InputStreamReader(p.getErrorStream())); 
      // read the output from the command 
      String s = null; 
      System.out.println("Here is the standard output of the command:\n"); 
      while ((s = stdInput.readLine()) != null) { 
       System.out.println(s); 
      } 
      // read any errors from the attempted command 
      System.out.println("Here is the standard error of the command (if any):\n"); 
      while ((s = stdError.readLine()) != null) { 
       System.out.println(s); 
      } 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

} 

輸出

Volume in drive C has no label. 
Volume Serial Number is 0827-578F 

Directory of c:\ 

06/11/2009 03:12 AM    24 autoexec.bat 
06/11/2009 03:12 AM    10 config.sys 
07/14/2009 08:07 AM <DIR>   PerfLogs 
10/10/2012 05:34 PM <DIR>   Program Files 
10/10/2012 05:30 PM <DIR>   Users 
10/10/2012 05:31 PM <DIR>   Windows 
       2 File(s)    34 bytes 
       4 Dir(s) 76,344,885,248 bytes free 
Here is the standard error of the command (if any): 

如果你能找到,可以給你只有文件及其修改的時間,那麼這個程序可能工作

+0

我不想聽到忘恩負義,但不是這段代碼有點偏離過去嗎?我需要修改上次修改的時間戳,因爲電視固件在此基礎上對文件進行排序。我想你只是打印輸出... – Andrea

+0

我以爲你想得到最後修改的文件,但我剛剛讀了你的評論道歉。我會找到一個更好的解決方案,然後回來給你 –

+0

不要擔心Bhavik,我知道該怎麼做!謝謝你的努力! ;) – Andrea

相關問題