Codenameone 奇怪的mkdir()行为
我的代码运行良好,没有任何麻烦。我真的无法指出是否发生了背景更新,我的代码是否被破坏。我试图在设备上创建目录/文件,但它抛出了一个错误。请参阅下面Logcat的堆栈跟踪和我的代码Codenameone 奇怪的mkdir()行为,codenameone,Codenameone,我的代码运行良好,没有任何麻烦。我真的无法指出是否发生了背景更新,我的代码是否被破坏。我试图在设备上创建目录/文件,但它抛出了一个错误。请参阅下面Logcat的堆栈跟踪和我的代码 05-06 05:41:04.503 9015-9039/com.jajitech.xdata.mobile I/System.out: this is ee 43736017.collectordecision_templateVdjd 05-06 05:41:04.523 9015-9039/com.jaj
05-06 05:41:04.503 9015-9039/com.jajitech.xdata.mobile I/System.out: this is ee 43736017.collectordecision_templateVdjd
05-06 05:41:04.523 9015-9039/com.jajitech.xdata.mobile I/System.out: this is sent code 0
05-06 05:41:04.523 9015-9073/com.jajitech.xdata.mobile W/System.err: entry is Vdjd
05-06 05:41:04.903 9015-9039/com.jajitech.xdata.mobile W/System.err: mkdir failed: ENOENT (No such file or directory) : /data/user/0/com.jajitech.xdata.mobile/files/dataplat/entries/43736017.collector/decision_template/Vdjd/sent
java.io.FileNotFoundException: /data/user/0/com.jajitech.xdata.mobile/files/dataplat/entries/43736017.collector/decision_template/Vdjd/sent/sent.jaji: open failed: ENOENT (No such file or directory)
05-06 05:41:04.933 9015-9039/com.jajitech.xdata.mobile W/System.err: at libcore.io.IoBridge.open(IoBridge.java:452)
at java.io.FileOutputStream.<init>(FileOutputStream.java:87)
at java.io.FileOutputStream.<init>(FileOutputStream.java:127)
at java.io.FileOutputStream.<init>(FileOutputStream.java:116)
at com.codename1.impl.android.AndroidImplementation.createFileOuputStream(AndroidImplementation.java:5292)
at com.codename1.impl.android.AndroidImplementation.openFileOutputStream(AndroidImplementation.java:5196)
at com.codename1.io.FileSystemStorage.openOutputStream(FileSystemStorage.java:274)
at com.jajitech.xdata.mobile.XDataMobile$22$1.run(XDataMobile.java:1771)
at com.codename1.ui.Display.processSerialCalls(Display.java:1129)
at com.codename1.ui.Display.edtLoopImpl(Display.java:1073)
at com.codename1.ui.Display.invokeAndBlock(Display.java:1186)
at com.codename1.ui.Display.invokeAndBlock(Display.java:1223)
at com.jajitech.xdata.mobile.XDataMobile.prepareToSendToCloud(XDataMobile.java:1736)
at com.jajitech.xdata.mobile.XDataMobile.lambda$NewDataEntry$17(XDataMobile.java:1457)
at com.jajitech.xdata.mobile.XDataMobile$$Lambda$16.actionPerformed(Unknown Source)
at com.codename1.ui.util.EventDispatcher.fireActionEvent(EventDispatcher.java:349)
at com.codename1.ui.Button.fireActionEvent(Button.java:512)
at com.codename1.ui.Button.released(Button.java:546)
at com.codename1.ui.Button.pointerReleased(Button.java:650)
at com.codename1.ui.Form.pointerReleased(Form.java:2903)
at com.codename1.ui.Component.pointerReleased(Component.java:4178)
at com.codename1.ui.Display.handleEvent(Display.java:2061)
at com.codename1.ui.Display.edtLoopImpl(Display.java:1043)
at com.codename1.ui.Display.mainEDTLoop(Display.java:961)
at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120)
at com.codename1.impl.CodenameOneThread$1.run(CodenameOneThread.java:60)
at java.lang.Thread.run(Thread.java:818)
Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory)
at libcore.io.Posix.open(Native Method)
at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
at libcore.io.IoBridge.open(IoBridge.java:438)
... 26 more
…您需要一个接一个地创建每个目录,直到找到最后一个。这就是
mkdir
与mkdirs
相反的工作方式。请发布一个最小、完整且可验证的代码示例。()您没有使用标准的android工具链。也许你应该标记为代号1以获得答案。谢谢Shai…工作正常。也许在后续更新中可以包含mkdirs()方法……不幸的是,它并非在所有操作系统上都可用。我同意我也更喜欢这种方法。。。
char sep = FileSystemStorage.getInstance().getFileSystemSeparator();
String dir = FileSystemStorage.getInstance().getAppHomePath() + sep + "dataplat"+sep+"entries"+sep+code+sep+section+sep+entry;
Display.getInstance().callSerially(new Runnable()
{
public void run()
{
if(isSilent == false)
{
status.setMessage("Preparing to send...");
status.setShowProgressIndicator(true);
status.setIcon(createIcon(FontImage.MATERIAL_WORK));
status.show();
errorCode= "1594";
}
char sep = FileSystemStorage.getInstance().getFileSystemSeparator();
String dir = FileSystemStorage.getInstance().getAppHomePath() + sep + "dataplat"+sep+"entries"+sep+code+sep+section+sep+entry;
try
{
FileSystemStorage.getInstance().mkdir(dir + sep + "sent"+sep);
errorCode= "1595";
//Line 1771 OutputStream dest = FileSystemStorage.getInstance().openOutputStream(dir + sep + "sent" + sep + "sent.jaji");
TarOutputStream out = new TarOutputStream( new BufferedOutputStream( dest ) );
String entries[] = FileSystemStorage.getInstance().listFiles(dir);