2017-04-12 5 views
0

Ich muss einige Dateien auf meinem Android-Handy speichern. So habe ich so etwas wie:Wie Android Dateien speichern?

FileOutputStream os = null; 
try{ 
    os = new FileOutputStream("/root/sdcard/DCIM/1.jpg"); 
    os.write(bytes); 
    os.close(); 
}catch(FileNotFoundException e){} 

Wenn ich dies tun, wäre es so etwas sagen wie

java.io.FileNotFoundException: /root/sdcard/DCIM/1.jpg (Permission denied) 

Btw, ich habe bereits requestd Erlaubnis in AndroidManifest.xml wie etwas mit:

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

Ich versuchte auch

getFilesDir().getAbsolutePath(); 

Und es bezieht sich eigentlich auf

/data/user/0/come.package.xxx/files 

Was ich keine Ahnung, wo dieser Weg ist, weil ich es nicht auf meinem Handy finden. Wenn ich ASUS Datei-Manager verwende, sehe ich den Pfad ist/root/sdcard/..., aber ich habe nicht einmal eine SD-Karte in meinem Handy, ich habe das iPhone seit vielen Jahren verwendet, also tue ich nicht wissen, wie das Android-Dateisystem jetzt funktioniert.

Das ist wirklich verwirrend für mich, könnte mir jemand erklären, wie das Android-Dateisystem funktioniert? Danke euch allen!

+0

, wenn Sie Android 6.0 oder höher verwenden, dann sollten Sie die Berechtigung manuell genehmigen oder sollte es auf der Laufzeit fragen. – Anmol

+0

Hier ist, was Sie brauchen [https://developer.android.com/training/permissions/requesting.html](https://developer.android.com/training/permissions/requesting.html) –

Antwort

0

wenn Sie android 6.0 Marsh oder höher Android-Version u Laufzeit verwenden Zugriffsberechtigung geben müssen. versuchen Code unten

if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { 
      camera.setEnabled(false); 
      ActivityCompat.requestPermissions(getActivity(), new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE }, 0); 
     } 
@Override 
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
     if (requestCode == 0) { 
      if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED 
        && grantResults[1] == PackageManager.PERMISSION_GRANTED) { 
       //permission will get success here 
       //do what you want 
      } 
      else { 
       //Permission not granted 
       Toast.makeText(getActivity(),"You need to grant camera permission to use camera",Toast.LENGTH_LONG).show(); 
      } 
     } 
    } 
+0

Wo sollte ich Ihre setzen Code? Kann ich es in onCreate() verwenden? Und ich habe CameraSource von Camera verwendet, daher kann ich setEnabled(); – x1uan

0

Um das Bild auf Android sparen:

private String saveToInternalStorage(String name, Bitmap bitmapImage){ 
     ContextWrapper cw = new ContextWrapper(context); 
     // path to /data/data/yourapp/app_data/imageDir 
     File directory = cw.getDir(IMAGE_TAG, Context.MODE_PRIVATE); 
     // Create imageDir 
     File mypath = new File(directory, name + ".jpg"); 

     FileOutputStream fos = null; 

     try { 
      fos = new FileOutputStream(mypath); 
      // Use the compress method on the BitMap object to write image to the OutputStream 
      bitmapImage.compress(Bitmap.CompressFormat.PNG, 100, fos); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } finally { 
      try { 
       if (fos != null) { 
        fos.close(); 
       } 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 

     return directory.getAbsolutePath(); 
    } 

Bild laden:

public void loadImage(ImageView imageView) { 
     // get path 
     ContextWrapper cw = new ContextWrapper(context); 
     File directory = cw.getDir(IMAGE_TAG, Context.MODE_PRIVATE); 
     String path = directory.getAbsolutePath(); 

     // load image 
     try { 
      File f = new File(path, name + ".jpg"); 
      Bitmap b = BitmapFactory.decodeStream(new FileInputStream(f)); 
      imageView.setImageBitmap(b); 
      imageView.setVisibility(View.VISIBLE); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
      Log.d("Image", "Image file not found.");  
     } 
} 
0

wenn Ihr u sind singen Marshmallow oder die neueste Version von Android, so müssen Sie zur Laufzeit, auf Ihrem Knopf klicken, als Sie Ihren Code zum Speichern von Datei in SD-Karte aufrufen müssen.

nach als wie dies zu tun,

public void onClick(View v) { 
    // write on SD card file data in the text box 
    try { 
     File myFile = new File("/sdcard/mysdfile.txt"); 
     myFile.createNewFile(); 
     FileOutputStream fOut = new FileOutputStream(myFile); 
     OutputStreamWriter myOutWriter = 
           new OutputStreamWriter(fOut); 
     myOutWriter.append(txtData.getText()); 
     myOutWriter.close(); 
     fOut.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(); 
    } 
} 
+0

Danke, aber es sieht so aus, als würde Ihr Code einen Text im Dateisystem lesen. – x1uan

+0

Entschuldigung überprüfen Sie jetzt. –