繁体   English   中英

创建文件夹和文件可在Android 7+上运行,但不能在较低版本上运行

[英]Creating folders and files works on Android 7+ but not on lower versions

我有一些代码应该创建一些公用文件夹并在其中保存文件。 我的代码可在我的Android 7设备上使用,但不能在4.1.1或5.1.1上使用(我没有在其他手机上尝试过。)

我的代码如下

public void createFile() {
    calendar_time = Calendar.getInstance(Locale.getDefault());
    int hour = calendar_time.get(Calendar.HOUR_OF_DAY);
    int minute = calendar_time.get(Calendar.MINUTE);
    int second = calendar_time.get(Calendar.SECOND);
    String time=String.valueOf(hour)+":"+String.valueOf(minute)+":"+String.valueOf(second);
    String sFileName=date+" "+time+" Part "+String.valueOf(file_counter)+".txt";

    try {
        File root = new File(Environment.getExternalStorageDirectory()+ "/Main Folder/"+date);
        if (!root.exists()) {
            root.mkdir();
        }
        myfile = new File(root.getAbsolutePath(), sFileName);
        if (!myfile.exists()) {
            myfile.createNewFile();
        }
        writer = new FileWriter(myfile);
        writer.append("Unit\n\n");
        writer.append("#\tValue \tX \tY \tZ \tTime\n\n");

        Toast.makeText(context, "Recording...", Toast.LENGTH_LONG).show();
        readyToRecord=true;
    } catch (IOException e) {
        e.printStackTrace();
        Toast.makeText(context, "Error creating file", Toast.LENGTH_SHORT).show();
        stop();
    }
}

在android 7上,它可以完美地工作。 在较低版本上,虽然没有。 如果我加入myfile.createNewFile();myfile.createNewFile(); 我收到以下错误

07-10 23:24:12.307 6888-6888/textfiletest.xyz.mreprogramming.textfiletest W/System.err: java.io.IOException: open failed: ENOENT (No such file or directory)
07-10 23:24:12.307 6888-6888/textfiletest.xyz.mreprogramming.textfiletest W/System.err:     at java.io.File.createNewFile(File.java:941)
07-10 23:24:12.307 6888-6888/textfiletest.xyz.mreprogramming.textfiletest W/System.err:     at textfiletest.xyz.mreprogramming.textfiletest.Recorder.createFile(Recorder.java:91)
07-10 23:24:12.307 6888-6888/textfiletest.xyz.mreprogramming.textfiletest W/System.err:     at textfiletest.xyz.mreprogramming.textfiletest.Recorder.startRecording(Recorder.java:67)
07-10 23:24:12.307 6888-6888/textfiletest.xyz.mreprogramming.textfiletest W/System.err:     at textfiletest.xyz.mreprogramming.textfiletest.MainActivity.getPermission(MainActivity.java:97)
07-10 23:24:12.308 6888-6888/textfiletest.xyz.mreprogramming.textfiletest W/System.err:     at textfiletest.xyz.mreprogramming.textfiletest.MainActivity.access$100(MainActivity.java:33)
07-10 23:24:12.308 6888-6888/textfiletest.xyz.mreprogramming.textfiletest W/System.err:     at textfiletest.xyz.mreprogramming.textfiletest.MainActivity$1.onClick(MainActivity.java:63)
07-10 23:24:12.308 6888-6888/textfiletest.xyz.mreprogramming.textfiletest W/System.err:     at android.view.View.performClick(View.java:4856)
07-10 23:24:12.308 6888-6888/textfiletest.xyz.mreprogramming.textfiletest W/System.err:     at android.view.View$PerformClick.run(View.java:19956)
07-10 23:24:12.308 6888-6888/textfiletest.xyz.mreprogramming.textfiletest W/System.err:     at android.os.Handler.handleCallback(Handler.java:739)
07-10 23:24:12.308 6888-6888/textfiletest.xyz.mreprogramming.textfiletest W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:95)
07-10 23:24:12.308 6888-6888/textfiletest.xyz.mreprogramming.textfiletest W/System.err:     at android.os.Looper.loop(Looper.java:211)
07-10 23:24:12.308 6888-6888/textfiletest.xyz.mreprogramming.textfiletest W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:5389)
07-10 23:24:12.308 6888-6888/textfiletest.xyz.mreprogramming.textfiletest W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
07-10 23:24:12.308 6888-6888/textfiletest.xyz.mreprogramming.textfiletest W/System.err:     at java.lang.reflect.Method.invoke(Method.java:372)
07-10 23:24:12.308 6888-6888/textfiletest.xyz.mreprogramming.textfiletest W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1020)
07-10 23:24:12.308 6888-6888/textfiletest.xyz.mreprogramming.textfiletest W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815)
07-10 23:24:12.308 6888-6888/textfiletest.xyz.mreprogramming.textfiletest W/System.err: Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory)
07-10 23:24:12.308 6888-6888/textfiletest.xyz.mreprogramming.textfiletest W/System.err:     at libcore.io.Posix.open(Native Method)
07-10 23:24:12.308 6888-6888/textfiletest.xyz.mreprogramming.textfiletest W/System.err:     at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
07-10 23:24:12.308 6888-6888/textfiletest.xyz.mreprogramming.textfiletest W/System.err:     at java.io.File.createNewFile(File.java:934)
07-10 23:24:12.308 6888-6888/textfiletest.xyz.mreprogramming.textfiletest W/System.err:     ... 15 more

如果我不包括行myfile.createNewFile(); 我收到以下不同的错误

07-10 23:26:29.755 9831-9831/textfiletest.xyz.mreprogramming.textfiletest W/System.err: java.io.FileNotFoundException: /storage/emulated/0/Ultimate EMF Detector/10-Ιουλ-2017/10-Ιουλ-2017 23:26:29 Part 1.txt: open failed: ENOENT (No such file or directory)
07-10 23:26:29.755 9831-9831/textfiletest.xyz.mreprogramming.textfiletest W/System.err:     at libcore.io.IoBridge.open(IoBridge.java:465)
07-10 23:26:29.755 9831-9831/textfiletest.xyz.mreprogramming.textfiletest W/System.err:     at java.io.FileOutputStream.<init>(FileOutputStream.java:87)
07-10 23:26:29.755 9831-9831/textfiletest.xyz.mreprogramming.textfiletest W/System.err:     at java.io.FileOutputStream.<init>(FileOutputStream.java:72)
07-10 23:26:29.755 9831-9831/textfiletest.xyz.mreprogramming.textfiletest W/System.err:     at java.io.FileWriter.<init>(FileWriter.java:42)
07-10 23:26:29.755 9831-9831/textfiletest.xyz.mreprogramming.textfiletest W/System.err:     at textfiletest.xyz.mreprogramming.textfiletest.Recorder.createFile(Recorder.java:92)
07-10 23:26:29.755 9831-9831/textfiletest.xyz.mreprogramming.textfiletest W/System.err:     at textfiletest.xyz.mreprogramming.textfiletest.Recorder.startRecording(Recorder.java:67)
07-10 23:26:29.755 9831-9831/textfiletest.xyz.mreprogramming.textfiletest W/System.err:     at textfiletest.xyz.mreprogramming.textfiletest.MainActivity.getPermission(MainActivity.java:97)
07-10 23:26:29.755 9831-9831/textfiletest.xyz.mreprogramming.textfiletest W/System.err:     at textfiletest.xyz.mreprogramming.textfiletest.MainActivity.access$100(MainActivity.java:33)
07-10 23:26:29.755 9831-9831/textfiletest.xyz.mreprogramming.textfiletest W/System.err:     at textfiletest.xyz.mreprogramming.textfiletest.MainActivity$1.onClick(MainActivity.java:63)
07-10 23:26:29.755 9831-9831/textfiletest.xyz.mreprogramming.textfiletest W/System.err:     at android.view.View.performClick(View.java:4856)
07-10 23:26:29.755 9831-9831/textfiletest.xyz.mreprogramming.textfiletest W/System.err:     at android.view.View$PerformClick.run(View.java:19956)
07-10 23:26:29.755 9831-9831/textfiletest.xyz.mreprogramming.textfiletest W/System.err:     at android.os.Handler.handleCallback(Handler.java:739)
07-10 23:26:29.755 9831-9831/textfiletest.xyz.mreprogramming.textfiletest W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:95)
07-10 23:26:29.755 9831-9831/textfiletest.xyz.mreprogramming.textfiletest W/System.err:     at android.os.Looper.loop(Looper.java:211)
07-10 23:26:29.755 9831-9831/textfiletest.xyz.mreprogramming.textfiletest W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:5389)
07-10 23:26:29.755 9831-9831/textfiletest.xyz.mreprogramming.textfiletest W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
07-10 23:26:29.755 9831-9831/textfiletest.xyz.mreprogramming.textfiletest W/System.err:     at java.lang.reflect.Method.invoke(Method.java:372)
07-10 23:26:29.755 9831-9831/textfiletest.xyz.mreprogramming.textfiletest W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1020)
07-10 23:26:29.755 9831-9831/textfiletest.xyz.mreprogramming.textfiletest W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815)
07-10 23:26:29.755 9831-9831/textfiletest.xyz.mreprogramming.textfiletest W/System.err: Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory)
07-10 23:26:29.756 9831-9831/textfiletest.xyz.mreprogramming.textfiletest W/System.err:     at libcore.io.Posix.open(Native Method)
07-10 23:26:29.756 9831-9831/textfiletest.xyz.mreprogramming.textfiletest W/System.err:     at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
07-10 23:26:29.756 9831-9831/textfiletest.xyz.mreprogramming.textfiletest W/System.err:     at libcore.io.IoBridge.open(IoBridge.java:451)
07-10 23:26:29.756 9831-9831/textfiletest.xyz.mreprogramming.textfiletest W/System.err:     ... 18 more

你能帮助我吗 ? 权限已正确处理:清单和运行时(如果需要)基于Android版本。

编辑我将代码更改为此

File dir = new File(Environment.getExternalStorageDirectory() + "/Main Folder/"+date);
        dir.mkdirs();
        myfile = new File(dir, sFileName);
        myfile.createNewFile();

这解决了Android 5.1.1的问题,但android 4.1.1仍然弹出相同的错误。

android 4.1.1中的问题是我的文件名中存在字符“:”。

12:51:39第1.txt

更改为

12-51-39第1.txt部分

修复所有手机中的问题。 可悲的是,它现在看起来更像是日期而不是时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM