将文件复制到Codename One中的根路径

时间:2017-10-21 23:41:19

标签: codenameone

在我的代码中,我提示用户加载json文件。

然后我尝试将此文件复制到sqlite数据库中。

一旦我获得了数据,我就可以根据需要对其进行操作 - 但我首先需要将其放在那里。

所以第1步是获取数据。

我已经取得了进展,提示用户导航到他们想要的文件 - 但是当我尝试读取文件时,我收到了这个错误..

ERROR: resources must reside in the root directory thus must start with a '/' character in Codename One! Invalid resource: file:///tmp/temp3257201851214246357..json

所以我认为我需要将此文件复制到根目录

我找不到显示如何执行此操作的链接。

到目前为止,这是我的代码......

                    case "Import Script":
                    try
                    {
                        JSONParser json = new JSONParser();

                        if (FileChooser.isAvailable()) {
                            FileChooser.showOpenDialog(".json", e2-> {
                                String file = (String)e2.getSource();
                                if (file == null) {
                                    home.add("No file was selected");
                                    home.revalidate();
                                } else {
                                    home.add("Please wait - busy importing");
                                    home.revalidate();
                                    String extension = null;
                                    if (file.lastIndexOf(".") > 0) {
                                        extension = file.substring(file.lastIndexOf(".")+1);
                                    }
                                    if ("json".equals(extension)) {
                                        FileSystemStorage fs = FileSystemStorage.getInstance();
                                        try {
                                            InputStream fis = fs.openInputStream(file);                                               

                                            try(Reader r = new InputStreamReader(Display.getInstance().getResourceAsStream(getClass(), file), "UTF-8"))
                                            {

                                                Map<String, Object> data = json.parseJSON(r);
                                                Result result = Result.fromContent(data);

......我从这里开始

此行发生错误......

try(Reader r = new InputStreamReader(Display.getInstance().getResourceAsStream(getClass(), file), "UTF-8"))

如果我对文件名进行硬编码并手动将其放在/ src文件夹中,那就可以了......就像这样...

try(Reader r = new InputStreamReader(Display.getInstance().getResourceAsStream(getClass(), '/test.json'), "UTF-8"))

但这违背了他们选择文件的目的

任何帮助将不胜感激

由于

1 个答案:

答案 0 :(得分:1)

我建议观看this video

它解释了数据存储的不同方式。混淆的核心原因之一是存储文件的3种不同方式:

  • 资源
  • 文件系统
  • 存储

getResourceAsStream会返回一个物理嵌入jar中的只读路径。它是平的,因此getResourceAsStream的所有路径必须以/开头,并且必须只包含其中一个。我建议避免使用多个.,尽管这应该在理论上有效。

sqlite数据库必须存储在文件系统中,文件系统封装为FileSystemStorage,这实际上是操作系统本机文件系统。但是你不能将它存储在你想要的任何地方,你需要将DB名称提供给系统,它会通知你存储文件的位置,以及上面代码中解释的内容。