Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法将文件保存到SD卡android应用程序_Java_Android_File - Fatal编程技术网

Java 无法将文件保存到SD卡android应用程序

Java 无法将文件保存到SD卡android应用程序,java,android,file,Java,Android,File,我在SD卡上保存/创建要保存文本的文件时遇到问题,我正在尝试检查文件是否已创建,如果未创建,请单击按钮将某些数据写入其中。以下是我的代码和错误输出: java.lang.RuntimeException: Unable to start activity ComponentInfo{ibettergetagoodgradeforthisorillbepissed.sciencefair.beta.mmmeds.com.mmmeds/ibettergetagoodgradeforthisorill

我在SD卡上保存/创建要保存文本的文件时遇到问题,我正在尝试检查文件是否已创建,如果未创建,请单击按钮将某些数据写入其中。以下是我的代码和错误输出:

java.lang.RuntimeException: Unable to start activity ComponentInfo{ibettergetagoodgradeforthisorillbepissed.sciencefair.beta.mmmeds.com.mmmeds/ibettergetagoodgradeforthisorillbepissed.sciencefair.beta.mmmeds.com.mmmeds.MainActivity}: java.lang.IllegalArgumentException: File /sdcard/output.txt contains a path separator
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2187)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2236)
            at android.app.ActivityThread.access$800(ActivityThread.java:138)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1199)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5034)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1270)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1086)
            at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.IllegalArgumentException: File /sdcard/output.txt contains a path separator
            at android.app.ContextImpl.makeFilename(ContextImpl.java:2165)
            at android.app.ContextImpl.getFileStreamPath(ContextImpl.java:964)
            at android.content.ContextWrapper.getFileStreamPath(ContextWrapper.java:195)
            at ibettergetagoodgradeforthisorillbepissed.sciencefair.beta.mmmeds.com.mmmeds.MainActivity.onCreate(MainActivity.java:207)
            at android.app.Activity.performCreate(Activity.java:5231)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2151)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2236)
            at android.app.ActivityThread.access$800(ActivityThread.java:138)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1199)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5034)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
这是错误输出:

java.lang.RuntimeException: Unable to start activity ComponentInfo{ibettergetagoodgradeforthisorillbepissed.sciencefair.beta.mmmeds.com.mmmeds/ibettergetagoodgradeforthisorillbepissed.sciencefair.beta.mmmeds.com.mmmeds.MainActivity}: java.lang.IllegalArgumentException: File /sdcard/output.txt contains a path separator
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2187)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2236)
            at android.app.ActivityThread.access$800(ActivityThread.java:138)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1199)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5034)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1270)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1086)
            at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.IllegalArgumentException: File /sdcard/output.txt contains a path separator
            at android.app.ContextImpl.makeFilename(ContextImpl.java:2165)
            at android.app.ContextImpl.getFileStreamPath(ContextImpl.java:964)
            at android.content.ContextWrapper.getFileStreamPath(ContextWrapper.java:195)
            at ibettergetagoodgradeforthisorillbepissed.sciencefair.beta.mmmeds.com.mmmeds.MainActivity.onCreate(MainActivity.java:207)
            at android.app.Activity.performCreate(Activity.java:5231)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2151)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2236)
            at android.app.ActivityThread.access$800(ActivityThread.java:138)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1199)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5034)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
下面是文件保存的代码:

String SDRoot = Environment.getExternalStorageDirectory().getPath();
            final File output = getFileStreamPath(SDRoot + "/output.txt");
        if(!output.exists()){
            try {
                output.createNewFile();
                Context context = getApplicationContext();
                CharSequence text = "Output File Created!";
                int duration = Toast.LENGTH_LONG;

                Toast fileCreated = Toast.makeText(context, text, duration);
                fileCreated.show();
            } catch (IOException e) {
                Context context = getApplicationContext();
                CharSequence text = "Output File Not Created!";
                int duration = Toast.LENGTH_LONG;

                Toast fileNotCreated = Toast.makeText(context, text, duration);
                fileNotCreated.show();
                e.printStackTrace();
            }
        }


            Button addbutton = (Button)findViewById(R.id.addMeds);
        addbutton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String outputLine = medOut.toString() + doseOut.getText() + dayout.getText() + timeOut.getText();

                try {
                    FileOutputStream fOut = new FileOutputStream(output);
                    OutputStreamWriter myOutputStreamWriter = new OutputStreamWriter(fOut);
                    myOutputStreamWriter.append(outputLine);
                    myOutputStreamWriter.flush();
                    myOutputStreamWriter.close();
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                    Toast.makeText(getBaseContext(), e.getMessage(),
                            Toast.LENGTH_SHORT).show();
                } catch (IOException e) {
                    e.printStackTrace();
                    Toast.makeText(getBaseContext(), e.getMessage(),
                            Toast.LENGTH_SHORT).show();
                }

            }
        });
}
Parameters:名称要获取其路径的文件的名称

如果您给出一个包含/的路径,它将崩溃,正如您已经注意到的那样

此外,此函数仅适用于您的应用程序私有文件,例如使用OpenFileOutput创建的文件

,int

就这样做吧:

String SDRoot = Environment.getExternalStorageDirectory().getPath();
final File output = new File(SDRoot + "/output.txt");

我无法在问题@Omersonmezyou需要使用不带out path的文件名中找到我的答案。您的文件名似乎包含路径SD卡。那么如何确定文件的创建位置@omersonmezgetFileStreamPath无法获取路径,它需要获取该目录中的文件名。Try File File=new FileSDRoot+/output.txt;