2011-01-11 47 views
2

我們有一個獨立的java swing應用程序,用戶可以通過提供IP在打印機上打印他繪製的內容。記住在客戶端的獨立應用程序中輸入的值

現在的要求是,應用程序需要記住該用戶上次給出的ip。

我到現在可以想到的是(儘管一個暴躁的) - 在客戶端計算機上保留一種日誌文件類型的存儲,並且每次應用程序啓動時它都會讀取上次提交的應用程序。

任何建議將有所幫助。

在此先感謝。

回答

5

以下是使用Java Preferences API實現您想要的教程。 從文章:

的Java偏好API提供了 系統的方式來處理用戶和 系統首選項和配置 數據,例如保存用戶設置, 記得有場 等的最後一個值

我會用這種方法在寫入任何數據了明確的,因爲它的平臺無關的文件。

0

我不真的推薦這個,但你也可以使用註冊表。

+0

我不知道該怎麼做。你能提供一些指點嗎? – kshtjsnghl 2011-01-11 18:47:48

+0

@kshtjsnghl Amir答案中的Java首選項APi使用註冊表,並使其相對容易。 – 2011-01-11 18:54:05

1

或多或少就是這樣。您仍然可以查看HistoryTextField的組件jEdit的源代碼。 http://www.jedit.org/api/org/gjt/sp/jedit/gui/HistoryTextField.html

從jEdit的源樣品:

public boolean save(Map<String, HistoryModel> models) 
{ 
    Log.log(Log.MESSAGE,HistoryModel.class,"Saving history"); 
    File file1 = new File(MiscUtilities.constructPath(
     jEdit.getSettingsDirectory(), "#history#save#")); 
    File file2 = new File(MiscUtilities.constructPath(
     jEdit.getSettingsDirectory(), "history")); 
    if(file2.exists() && file2.lastModified() != historyModTime) 
    { 
     Log.log(Log.WARNING,HistoryModel.class,file2 
      + " changed on disk; will not save history"); 
     return false; 
    } 

    jEdit.backupSettingsFile(file2); 

    String lineSep = System.getProperty("line.separator"); 

    BufferedWriter out = null; 

    try 
    { 
     out = new BufferedWriter(new OutputStreamWriter(
      new FileOutputStream(file1), "UTF-8")); 

     if(models != null) 
     { 
      Collection<HistoryModel> values = models.values(); 
      for (HistoryModel model : values) 
      { 
       if(model.getSize() == 0) 
        continue; 

       out.write('['); 
       out.write(StandardUtilities.charsToEscapes(
        model.getName(),TO_ESCAPE)); 
       out.write(']'); 
       out.write(lineSep); 

       for(int i = 0; i < model.getSize(); i++) 
       { 
        out.write(StandardUtilities.charsToEscapes(
         model.getItem(i), 
         TO_ESCAPE)); 
        out.write(lineSep); 
       } 
      } 
     } 

     out.close(); 

     /* to avoid data loss, only do this if the above 
     * completed successfully */ 
     file2.delete(); 
     file1.renameTo(file2); 
    } 
    catch(IOException io) 
    { 
     Log.log(Log.ERROR,HistoryModel.class,io); 
    } 
    finally 
    { 
     IOUtilities.closeQuietly(out); 
    } 

    historyModTime = file2.lastModified(); 
    return true; 
} 
1

由於它是一個Swing應用程序,您可以使用Java Web Start則堅持使用PersistenceService數據啓動它。這是一個demo. of the PersistenceService

相關問題