无法读取和写入导出的Processing应用程序中的同一文件

时间:2013-03-31 18:52:23

标签: processing datastore

我正在使用外部.txt文件来保存递增名称索引,以便每当有人在我的应用中“拍照”时(例如image_1.jpgimage_2.jpg等) 。我试图在外部保存数据,以便用户每次运行程序时都不会覆盖他们的图片。但是,由于Processing将其内容打包以进行导出,我不能同时读取和写入同一文件。它读取位于apps包内容中的相应文件,但是,当它尝试写入该文件时,它会在与app本身相同的目录中创建一个新文件夹,并写入具有相同名称的新文件。

基本上,它读取正确的文件,但拒绝写入,而是复制并写入该文件。该应用程序运行正常,但每次打开它并拍照时,您都会覆盖已有的图像。

我尝试将“写入”位置命名为显式相同的链接,导出的应用程序将数据文件夹存储在包内容(Contents/Resources/Java/data/assets)中,但这会在同一文件中创建此目录的副本。应用程序。

当我通过将读取代码更改为../storage/pictureNumber.txt然后将此文件放在app本身旁边时导出应用程序时,我还尝试从我的数据文件夹中排除我尝试读取/写入的文件。当我这样做时,应用程序根本不启动,因为它正在查找自己的数据文件夹进行存储,并拒绝使用../超出自身范围。有没有人在导出的处理中读取和写入同一文件的运气.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;
    }
}

1 个答案:

答案 0 :(得分: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); 

一切正常!