在 Codenameone 中保存和检索文件
Saving and retrieving files in Codenameone
我有一个包含数据文件(一些图像和 xml 文件)的应用程序,我已将它们打包在一个 zip 文件中。
我用 zipme 打开文件并保存文件。我为此使用了此代码
private void save1( ) {
InputStream is;
FileChooser.showOpenDialog(".zip", new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (e != null && e.getSource() != null) {
String file = (String)e.getSource();
FileSystemStorage fs = FileSystemStorage.getInstance();
try {
InputStream is = fs.openInputStream(file);
ZipInputStream zipStream = new ZipInputStream(is);
ZipEntry entry;
// create a buffer to improve copy performance later.
byte[] buffer = new byte[2048];
while ((entry = zipStream.getNextEntry()) != null) {
String s = entry.getName();
String outdir = FileSystemStorage.getInstance().getAppHomePath();
if (outdir.length() > 0) {
outdir = outdir ;
}
String outpath = outdir + "/" + entry.getName();
OutputStream output = null;
try {
output = FileSystemStorage.getInstance().openOutputStream(outpath);
int len = 0;
while ((len = zipStream.read(buffer)) > 0) {
output.write(buffer, 0, len);
}
} finally {
// we must always close the output file
if (output != null) {
output.close();
}
}
} } catch (IOException ex) {
Log.p(ex.getMessage(), 0); } } }});}
我在 netbeans 中看到,在模拟器中,文件被保存到
用户/.cn1
所以这适用于桌面
获取我使用的图像
String outdir = FileSystemStorage.getInstance().getAppHomePath();
图片 uur1 = EncodedImage.create(outdir + "/West.jpg");
我也尝试过不使用 outdir,但也不走运。
我哪里错了。
这应该可以在没有额外斜杠的情况下工作:
Image uur1 = EncodedImage.create(outdir + "West.jpg");.
请注意,此代码区分大小写,因此请确保文件的大小写正确。这是否在模拟器上失败了,如果是的话,在加载代码上放置一个断点并确保文件物理存在
我在问题中找到的答案是:
1 没有 Shai Among 建议的额外斜杠:
2 为 enecodedimage.create() 创建一个输入流,而不仅仅是一个带有文件路径的字符串
如果没有第二部分,应用程序无法运行在模拟和设备上正确
FileSystemStorage fs = FileSystemStorage.getInstance();
String outdir = FileSystemStorage.getInstance().getAppHomePath();
String outpath = outdir + West.jpg;
InputStream isk = fs.openInputStream(outpath);
Image uur = EncodedImage.create(isk);
我有一个包含数据文件(一些图像和 xml 文件)的应用程序,我已将它们打包在一个 zip 文件中。
我用 zipme 打开文件并保存文件。我为此使用了此代码
private void save1( ) {
InputStream is;
FileChooser.showOpenDialog(".zip", new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (e != null && e.getSource() != null) {
String file = (String)e.getSource();
FileSystemStorage fs = FileSystemStorage.getInstance();
try {
InputStream is = fs.openInputStream(file);
ZipInputStream zipStream = new ZipInputStream(is);
ZipEntry entry;
// create a buffer to improve copy performance later.
byte[] buffer = new byte[2048];
while ((entry = zipStream.getNextEntry()) != null) {
String s = entry.getName();
String outdir = FileSystemStorage.getInstance().getAppHomePath();
if (outdir.length() > 0) {
outdir = outdir ;
}
String outpath = outdir + "/" + entry.getName();
OutputStream output = null;
try {
output = FileSystemStorage.getInstance().openOutputStream(outpath);
int len = 0;
while ((len = zipStream.read(buffer)) > 0) {
output.write(buffer, 0, len);
}
} finally {
// we must always close the output file
if (output != null) {
output.close();
}
}
} } catch (IOException ex) {
Log.p(ex.getMessage(), 0); } } }});}
我在 netbeans 中看到,在模拟器中,文件被保存到 用户/.cn1 所以这适用于桌面
获取我使用的图像
String outdir = FileSystemStorage.getInstance().getAppHomePath(); 图片 uur1 = EncodedImage.create(outdir + "/West.jpg");
我也尝试过不使用 outdir,但也不走运。 我哪里错了。
这应该可以在没有额外斜杠的情况下工作:
Image uur1 = EncodedImage.create(outdir + "West.jpg");.
请注意,此代码区分大小写,因此请确保文件的大小写正确。这是否在模拟器上失败了,如果是的话,在加载代码上放置一个断点并确保文件物理存在
我在问题中找到的答案是: 1 没有 Shai Among 建议的额外斜杠: 2 为 enecodedimage.create() 创建一个输入流,而不仅仅是一个带有文件路径的字符串
如果没有第二部分,应用程序无法运行在模拟和设备上正确
FileSystemStorage fs = FileSystemStorage.getInstance();
String outdir = FileSystemStorage.getInstance().getAppHomePath();
String outpath = outdir + West.jpg;
InputStream isk = fs.openInputStream(outpath);
Image uur = EncodedImage.create(isk);