0

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

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

我尝试将“写入”位置命名为与导出的应用程序将数据文件夹存储在包内容(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;
    }
}
4

1 回答 1

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); 

一切正常!

于 2013-04-01T03:27:02.293 回答