2016-09-22 127 views
-2

我想從任何我想要的目錄中選擇一個隨機文件。如 C:\ Users \ Josh \ Pictures \ [randomFile]從Java目錄中選擇一個隨機文件

我沒有代碼顯示我只是想知道我將如何來這樣做。

我完全在做什麼是使用一個類來改變我的桌面的背景,現在我想添加一個隨機文件,所以當它刷新後臺將是不同的,我不必停止運行的代碼手動更改路徑中文件的名稱。如果你想知道繼承人是什麼樣子

import java.io.File; 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 


public class BackgroundTest { 

    final static File dir = new File("C:\\Users\\Kevin\\Pictures\\Pyimgur\\"); 
    static int size = 10; 
    static String [] fileArray = new String[size]; 





public static void main(String[] args) { 
    File[] files = dir.listFiles(); 
    for(int i =0; i<size;i++){ 
     int idz = (int)(Math.random()*size); 
     fileArray[i]=files[idz].getName(); 

    } 

    for(String x: fileArray){ 
     System.out.print(x); 
    } 

    String path = "C:\\Users\\Kevin\\Pictures\\Pyimgur\\"; 
    String picture = "picture.jpg"; 
    //System.out.print(fileArray[0]); 

    SPI.INSTANCE.SystemParametersInfo(
      new UINT_PTR(SPI.SPI_SETDESKWALLPAPER), 
      new UINT_PTR(0), 
      path + picture, 
      new UINT_PTR(SPI.SPIF_UPDATEINIFILE | SPI.SPIF_SENDWININICHANGE)); 
} 

public interface SPI extends StdCallLibrary { 

    //from MSDN article 
    long SPI_SETDESKWALLPAPER = 20; 
    long SPIF_UPDATEINIFILE = 0x01; 
    long SPIF_SENDWININICHANGE = 0x02; 

    SPI INSTANCE = (SPI) Native.loadLibrary("user32", SPI.class, new HashMap<Object, Object>() { 
     { 
      put(OPTION_TYPE_MAPPER, W32APITypeMapper.UNICODE); 
      put(OPTION_FUNCTION_MAPPER, W32APIFunctionMapper.UNICODE); 
     } 
    }); 

    boolean SystemParametersInfo(
      UINT_PTR uiAction, 
      UINT_PTR uiParam, 
      String pvParam, 
      UINT_PTR fWinIni 
    ); 
    } 
} 
+1

在問這裏之前,嘗試先做一些事情總是最好的,然後顯示你的問題。至少,這會產生一個更好,更具體的問題。我還建議您刪除與手頭問題無關的任何代碼,以及使您的發佈代碼可運行和編譯所需的任何其他代碼,僅此而已。 –

+2

基本上,你想獲得目錄中的文件列表,然後使用隨機數生成器來選擇其中的一個。你不知道你是如何使用它的,或者解釋你已經有什麼問題了。 –

+0

您可能面臨的任何問題? – Viney

回答

4
  1. 使用File.listFiles()給定的目錄中創建文件的array
  2. 根據此數組中的隨機索引選擇文件。
    這可以通過Random類的實例使用Random.nextInt(int bound)來完成,其中bound在這種情況下是array中的文件量,因此是數組的長度。

例子:

File[] files = dir.listFiles(); 

Random rand = new Random(); 

File file = files[rand.nextInt(files.length)]; 
+0

是的,這工作,但它打印出完整的路徑名我只想要文件的名稱我會怎麼做? – ChrisEthanFox

+0

@ChrisEthanFox這與這裏提供的代碼激情無關;這就是你打印的方式。但至於答案,這將與'file.getName()' – XenoRo

+0

@AlmightyR感謝您的建議 – passion

1

掃描目錄,使其中的文件列表,然後拿起從該列表中隨機指數。

然後基於該原則通過僅對有效文件進行過濾(本例中爲圖像文件);避免挑選與當前相同的圖像;和其他類似的改進...

+0

@HovercraftFullOfEels謝謝氣墊船。 =)我覺得我的回答有點太短,基本的東西......如果OP提供了他所嘗試的內容,我會稍後再編輯它。 – XenoRo