我正在使用外部.txt
文件来保存递增名称索引,以便每当有人在我的应用中“拍照”时(例如image_1.jpg
,image_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;
}
}
答案 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);
一切正常!