簡體   English   中英

android-無法保存文本文件

[英]android - can't save text file

這個問題很普遍,我已經用谷歌搜索了一下,但仍然無法正常工作。 我只是想使用以下代碼保存文本文件:

                String state = Environment.getExternalStorageState();
                if (!Environment.MEDIA_MOUNTED.equals(state)) {
                    Toast.makeText(getApplicationContext(), "Access denied", Toast.LENGTH_LONG).show();
                }
                String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/data";
                File dir = new File(path);
                dir.mkdirs();
                File file = new File(path + "/savedFile.txt");
                String saveText = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime());
                FileOutputStream fos = null;
                try {
                    fos = new FileOutputStream(file);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
                try {
                    try {
                        fos.write(saveText.getBytes());
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                } finally {
                    try {
                        fos.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                Toast.makeText(getApplicationContext(), "Saved", Toast.LENGTH_LONG).show();
                break;

在清單上我聲明:

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

但是,每次我嘗試運行代碼時,應用都會崩潰,並顯示錯誤消息“不幸的是,APP_NAME已停止。”有人可以告訴我我的代碼有什么問題嗎?

if ((checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)   == PackageManager.PERMISSION_GRANTED)&& Build.VERSION.SDK_INT >= 23 ) {
                Log.v(TAG,"Permission is granted");
                return true;}
              else{
              ActivityCompat.requestPermissions(this, new String[]Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE);
                  }
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if(grantResults[0]== PackageManager.PERMISSION_GRANTED){
            Log.v(TAG,"Permission: "+permissions[0]+ "was "+grantResults[0]);
             String state = Environment.getExternalStorageState();
            if (!Environment.MEDIA_MOUNTED.equals(state)) {
                Toast.makeText(getApplicationContext(), "Access denied", Toast.LENGTH_LONG).show();
            }
            String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/data";
            File dir = new File(path);
            dir.mkdirs();
             File file = new File(path + "/savedFile.txt");
            String saveText = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime());

                 try {
                       fos = new FileOutputStream(file);
                       OutputStreamWriter ow =  new OutputStreamWriter(fos);
                       ow.write(saveText.getBytes());
                       ow.append(saveText.getText());
                       ow.close();
                       fos.close();
                       Toast.makeText(getBaseContext(),
                       "Done writing SD 'mysdfile.txt'",Toast.LENGTH_SHORT).show();
                     }} catch (Exception e) {
                            Toast.makeText(getBaseContext(), e.getMessage(),Toast.LENGTH_SHORT).show();
                                           }

        }
    }

您需要使用類似以下代碼的代碼。因為您需要指定運行時權限。棉花糖需要您首先檢查權限以使用相應的資源。 從Android 6.0(API級別23)開始,用戶在應用程序運行時(而不是在安裝應用程序時)授予應用程序權限。 這種方法簡化了應用程序的安裝過程,因為用戶在安裝或更新應用程序時無需授予權限。 它還使用戶可以更好地控制應用程序的功能。 例如,用戶可以選擇授予攝像頭應用訪問攝像頭的權限,但不授予設備位置的訪問權限。 用戶可以隨時轉到應用的“設置”屏幕來撤消權限

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM