无法在android中创建XML文件

无法在android中创建XML文件,android,xml,file-access,Android,Xml,File Access,我正在创建一个xml文件,我想在其中保存来自应用程序的数据。但是我在logcat java.io.IOException: open failed: EACCES (Permission denied) 03-02 12:08:40.352 16419-16419/com.example.accurat.application W/System.err: at java.io.File.createNewFile(File.java:939) 03-02 12:08:40.352 164

我正在创建一个
xml
文件,我想在其中保存来自
应用程序的数据。但是我在
logcat

java.io.IOException: open failed: EACCES (Permission denied)
03-02 12:08:40.352 16419-16419/com.example.accurat.application W/System.err:     at java.io.File.createNewFile(File.java:939)
03-02 12:08:40.352 16419-16419/com.example.accurat.application W/System.err:     at com.example.accurat.application.MainActivity$4.onPermissionGranted(MainActivity.java:192)
03-02 12:08:40.352 16419-16419/com.example.accurat.application W/System.err:     at com.gun0912.tedpermission.TedInstance.onPermissionResult(TedInstance.java:65)
03-02 12:08:40.352 16419-16419/com.example.accurat.application W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
03-02 12:08:40.352 16419-16419/com.example.accurat.application W/System.err:     at com.squareup.otto.EventHandler.handleEvent(EventHandler.java:89)
03-02 12:08:40.353 16419-16419/com.example.accurat.application W/System.err:     at com.squareup.otto.Bus.dispatch(Bus.java:385)
03-02 12:08:40.353 16419-16419/com.example.accurat.application W/System.err:     at com.squareup.otto.Bus.dispatchQueuedEvents(Bus.java:368)
03-02 12:08:40.353 16419-16419/com.example.accurat.application W/System.err:     at com.squareup.otto.Bus.post(Bus.java:337)
03-02 12:08:40.353 16419-16419/com.example.accurat.application W/System.err:     at com.gun0912.tedpermission.busevent.TedBusProvider.post(TedBusProvider.java:49)
03-02 12:08:40.353 16419-16419/com.example.accurat.application W/System.err:     at com.gun0912.tedpermission.TedPermissionActivity.permissionGranted(TedPermissionActivity.java:123)
03-02 12:08:40.353 16419-16419/com.example.accurat.application W/System.err:     at com.gun0912.tedpermission.TedPermissionActivity.checkPermissions(TedPermissionActivity.java:190)
03-02 12:08:40.353 16419-16419/com.example.accurat.application W/System.err:     at com.gun0912.tedpermission.TedPermissionActivity.onCreate(TedPermissionActivity.java:65)
03-02 12:08:40.353 16419-16419/com.example.accurat.application W/System.err:     at android.app.Activity.performCreate(Activity.java:6270)
03-02 12:08:40.353 16419-16419/com.example.accurat.application W/System.err:     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1130)
03-02 12:08:40.353 16419-16419/com.example.accurat.application W/System.err:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2395)
03-02 12:08:40.353 16419-16419/com.example.accurat.application W/System.err:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2506)
03-02 12:08:40.353 16419-16419/com.example.accurat.application W/System.err:     at android.app.ActivityThread.-wrap11(ActivityThread.java)
03-02 12:08:40.353 16419-16419/com.example.accurat.application W/System.err:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1363)
03-02 12:08:40.353 16419-16419/com.example.accurat.application W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:102)
03-02 12:08:40.353 16419-16419/com.example.accurat.application W/System.err:     at android.os.Looper.loop(Looper.java:148)
03-02 12:08:40.353 16419-16419/com.example.accurat.application W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:5491)
03-02 12:08:40.353 16419-16419/com.example.accurat.application W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
03-02 12:08:40.353 16419-16419/com.example.accurat.application W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
03-02 12:08:40.353 16419-16419/com.example.accurat.application W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
03-02 12:08:40.353 16419-16419/com.example.accurat.application W/System.err: Caused by: android.system.ErrnoException: open failed: EACCES (Permission denied)
03-02 12:08:40.353 16419-16419/com.example.accurat.application W/System.err:     at libcore.io.Posix.open(Native Method)
03-02 12:08:40.353 16419-16419/com.example.accurat.application W/System.err:     at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
03-02 12:08:40.354 16419-16419/com.example.accurat.application W/System.err:     at java.io.File.createNewFile(File.java:932)
03-02 12:08:40.354 16419-16419/com.example.accurat.application W/System.err:
在我的清单文件中,我有权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

非常感谢您的帮助。

您的文件是/storage/simulated/0filename,无法创建,请在文件名和存储位置之间使用“/”

File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/" + filename);
                          file.createNewFile();

您的文件是/storage/emulated/0filename,无法创建,请在文件名和存储位置之间使用“/”

File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/" + filename);
                          file.createNewFile();

您需要为文件创建添加运行时权限

将与文件相关的代码移动到单独的方法,并在授予权限时调用它

例如:

ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 0);  //add this code in onCreate()
现在:

if(ispermissiongrated()){
dou your_work();//在这里创建一个方法或编写整个代码
}
公共布尔值isPermissionGrated(){
如果(Build.VERSION.SDK_INT>=23){
if(checkSelfPermission(android.Manifest.permission.WRITE\u外部存储)
==PackageManager.权限(已授予){
Log.v(标记“已授予许可”);
返回true;
}否则{
Log.v(标记“权限被撤销”);
ActivityCompat.requestPermissions(getActivity(),新字符串[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},0);
返回false;
}
}
否则{//将自动授予sdk 0上的权限
&&grantResults[0]==PackageManager.PERMISSION\u已授予){
Toast.makeText(getContext(),“已授予权限”,Toast.LENGTH_SHORT.show();
//你的工作是调用方法吗
}否则{
Toast.makeText(getContext(),“权限被拒绝”,Toast.LENGTH_SHORT.show();
}
返回;
}
//其他“案例”行,用于检查其他
//此应用可能请求的权限
}
}

您需要为文件创建添加运行时权限

将与文件相关的代码移动到单独的方法,并在授予权限时调用它

例如:

ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 0);  //add this code in onCreate()
现在:

if(ispermissiongrated()){
dou your_work();//在这里创建一个方法或编写整个代码
}
公共布尔值isPermissionGrated(){
如果(Build.VERSION.SDK_INT>=23){
if(checkSelfPermission(android.Manifest.permission.WRITE\u外部存储)
==PackageManager.权限(已授予){
Log.v(标记“已授予许可”);
返回true;
}否则{
Log.v(标记“权限被撤销”);
ActivityCompat.requestPermissions(getActivity(),新字符串[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},0);
返回false;
}
}
否则{//将自动授予sdk 0上的权限
&&grantResults[0]==PackageManager.PERMISSION\u已授予){
Toast.makeText(getContext(),“已授予权限”,Toast.LENGTH_SHORT.show();
//你的工作是调用方法吗
}否则{
Toast.makeText(getContext(),“权限被拒绝”,Toast.LENGTH_SHORT.show();
}
返回;
}
//其他“案例”行,用于检查其他
//此应用可能请求的权限
}
}


@cricket\u 007我已经有权限了request@cricket_007请查看我的更新代码为什么添加getAbsolutePath()?我知道但你不需要它我想试试这个答案@cricket_007我已经有权限了request@cricket_007请查看我的更新代码为什么添加getAbsolutePath()?我知道,但你不需要它我想试试这个答案似乎他实现了运行时权限查看错误的第一行:
java.io.IOException:open failed:EACCES(权限被拒绝)
,并认为op的实现是正确的还是错误的wrong@rafsanahmad007谢谢你的帮助,但是我的许可处理程序已经足够好了。通过遵循Anuj Pandey的
solution@rafsanahmad007这是正确的,而且您的代码也可以工作(我知道:)似乎他实现了运行时权限查看错误的第一行:
java.io.IOException:open failed:EACCES(权限被拒绝)
并认为op的实现是正确的还是错误的wrong@rafsanahmad007谢谢你的帮助,但是我的许可处理程序已经足够好了。通过遵循Anuj Pandey的
solution@rafsanahmad007它是正确的,并且您的代码也可以工作。我知道:)通过将文件连接到我的系统,我应该在我的手机中的何处找到该文件?此代码snipset来自您的onpermissiongrated方法。只要在那里更新它,它就会正常工作。文件将在您的父存储中,因为您没有提到它的任何目录是的,它正在工作,我可以看到我的文件,但当我打开它时,上面写着无法打开文件,我通过系统连接时找不到文件您提到过任何文件扩展名吗?断开设备连接并再次连接到系统,然后检查通过连接到系统在手机中的何处可以找到文件?此代码snipset来自您的onpermissiongrated方法只需更新即可在那里它会正常工作。文件将在您的父级存储中,因为您没有提到它的任何目录是的,它正在工作,我可以看到我的文件,但当我打开它时,它显示无法打开该文件,当我通过我的系统连接它时,我找不到该文件您提到过任何文件扩展名吗?断开连接,然后再次将设备与您的系统连接,然后检查
if(isPermissionGranted()){
     do_your_work();  //create a method or write the whole code here
    }


 public  boolean isPermissionGranted() {
    if (Build.VERSION.SDK_INT >= 23) {
        if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
                == PackageManager.PERMISSION_GRANTED) {
            Log.v(TAG,"Permission is granted");
            return true;
        } else {

            Log.v(TAG,"Permission is revoked");
            ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 0);
            return false;
        }
    }
    else { //permission is automatically granted on sdk<23 upon installation
        Log.v(TAG,"Permission is granted");
        return true;
    }
}


 @Override
public void onRequestPermissionsResult(int requestCode,
                                       String permissions[], int[] grantResults) {
    switch (requestCode) {

        case 0: {

            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Toast.makeText(getContext(), "Permission granted", Toast.LENGTH_SHORT).show();
                //do your work call method
            } else {
                Toast.makeText(getContext(), "Permission denied", Toast.LENGTH_SHORT).show();
            }
            return;
        }

        // other 'case' lines to check for other
        // permissions this app might request
    }
 }