2013-03-31 22 views
0

我正在使用外部.txt文件來保存每當有人在我的應用程序中「拍照」時遞增的名稱索引(即image_1.jpgimage_2.jpg等... )。我試圖在外部保存數據,以便用戶每次運行程序時都不會覆蓋圖片。但是,由於處理將其內容導出的方式不能同時讀取和寫入同一文件。它會讀取位於應用程序包內容中的相應文件,但是當它嘗試寫入該文件時,它會在與應用程序本身相同的目錄中創建一個新文件夾,並將其寫入具有相同名稱的新文件。無法讀取和寫入導出的處理應用程序中的同一文件

從本質上講,它讀取正確的文件,但拒絕寫入它,而是複製並寫入該文件。該應用運行良好,但每次打開它並拍攝照片時,都會覆蓋已有的圖像。

我已經嘗試將「寫入」位置命名爲與導出的應用程序將數據文件夾存儲在包內容(Contents/Resources/Java/data/assets)中的位置相同的鏈接,但這會在與應用程序相同的文件中創建此目錄的副本。

我也試圖排除我想,當我通過改變讀取碼以../storage/pictureNumber.txt,然後把旁邊的應用程序本身這個文件導出應用程序讀取從我的數據文件夾/寫文件。當我這樣做時,應用程序根本不會啓動,因爲它正在查看自己的數據文件夾中進行存儲,並拒絕使用../以外的地方。有沒有人有幸在導出的處理.app中讀取和寫入同一個文件?

這裏是正在處理加載和文件的保存類代碼:

class Camera { 
    PImage cameraImage; 
    int cameraPadding = 10; 
    int cameraWidth = 60; 
    int opacity = 0; 
    int flashDecrementer = 50; //higher number means quicker flash 
    int pictureName; 

    Camera() { 
     String[] pictureIndex = loadStrings("assets/pictureNumber.txt"); 
     pictureName = int(pictureIndex[0]); 
     cameraImage = loadImage("assets/camera.jpg"); 
     String _pictureName = "" + char(pictureName); 
     println(pictureName); 
    } 

    void display(float mx, float my) { 
     image(cameraImage, cameraPadding, cameraPadding, 
       cameraWidth, cameraWidth-cameraWidth/5); 
    } 

    boolean isOver(float mx, float my) { 
     if (mx >= cameraPadding && 
      mx <= cameraPadding+cameraWidth && 
      my >= cameraPadding && 
      my <= cameraPadding+cameraWidth-cameraWidth/5) { 
      return true; 
     } 
     else { 
      return false; 
     } 
    } 

    void captureImage() { 
     save("pictures/"+lines.picturePrefix+"_"+pictureName+".jpg"); 
     pictureName++; 
     String _null = ""; 
     // String _tempPictureName = _null.valueOf(pictureName); 
     String[] _pictureName = {_null.valueOf(pictureName)}; 
     saveStrings("assets/pictureNumber.txt", _pictureName); 
     println(_pictureName); 
    } 

    void flash() { 
     fill(255, opacity); 
     rect(0,0,width,height); 
     opacity -= flashDecrementer; 
     if(opacity <= 0) opacity = 0; 
    } 
} 
+0

我不能重現這一點。當我複製加載和保存的部分代碼時,第一次運行應用程序時會得到空值,然後寫入資產文件夾中的文件,隨後執行運行正常。 –

+0

您是導出應用程序還是在處理中運行它?它在處理中工作正常,但不會在應用程序導出後運行。它實際上不會無法運行,它只是覆蓋以前的圖像,因爲每次導出的應用程序運行時,「pictureNumber」都會重置爲1。 – Brannon

+0

我試過它作爲一個應用程序。下面是我測試過的代碼(也許我誤解了一些東西):http://pastebin.com/sY1rCLHV –

回答

0

很多搜​​索我發現,你必須按順序從閱讀使用savePath()後,目錄在project.jar之外。相機類構造現在看起來像這樣:

path = savePath("storage"); 
println(path); 
String[] pictureIndex = loadStrings(path+"/pictureNumber.txt"); 
pictureName = int(pictureIndex[0]); 
cameraImage = loadImage("assets/camera.jpg"); 
String _pictureName = ""+char(pictureName); 

和一切正常!

相關問題