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