在我的代码中,我提示用户加载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"))
但这违背了他们选择文件的目的
任何帮助将不胜感激
由于
答案 0 :(得分:1)
我建议观看this video。
它解释了数据存储的不同方式。混淆的核心原因之一是存储文件的3种不同方式:
getResourceAsStream
会返回一个物理嵌入jar中的只读路径。它是平的,因此getResourceAsStream
的所有路径必须以/
开头,并且必须只包含其中一个。我建议避免使用多个.
,尽管这应该在理论上有效。
sqlite数据库必须存储在文件系统中,文件系统封装为FileSystemStorage
,这实际上是操作系统本机文件系统。但是你不能将它存储在你想要的任何地方,你需要将DB名称提供给系统,它会通知你存储文件的位置,以及上面代码中解释的内容。