我有一个问题,在我的Android应用程序上创建一个目录并将文件保存到它.我正在使用这段代码来执行此操作:
String filename = "MyApp/MediaTag/MediaTag-"+objectId+".png";
File file = new File(Environment.getExternalStorageDirectory(), filename);
FileOutputStream fos;
fos = new FileOutputStream(file);
fos.write(mediaTagBuffer);
fos.flush();
fos.close();
Run Code Online (Sandbox Code Playgroud)
但这是一个例外:
java.io.FileNotFoundException:/mnt/sdcard/MyApp/MediaCard/MediaCard-0.png(没有这样的文件或目录)
在那条线上: fos = new FileOutputStream(file);
如果我将文件名设置为:"MyApp/MediaTag-"+objectId+"它正在工作,但如果我尝试创建并将文件保存到另一个目录,则会抛出异常.那么任何想法我做错了什么?
还有一个问题:有没有办法让我的文件在外部存储中保密,这样用户就无法在图库中看到它们,只有当他连接他的设备时Disk Drive?
我使用以下代码从我的服务器下载文件,然后将其写入SD卡的根目录,一切正常:
package com.downloader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import android.os.Environment;
import android.util.Log;
public class Downloader {
public void DownloadFile(String fileURL, String fileName) {
try {
File root = Environment.getExternalStorageDirectory();
URL u = new URL(fileURL);
HttpURLConnection c = (HttpURLConnection) u.openConnection();
c.setRequestMethod("GET");
c.setDoOutput(true);
c.connect();
FileOutputStream f = new FileOutputStream(new File(root, fileName));
InputStream in = c.getInputStream();
byte[] buffer = new byte[1024];
int len1 = 0;
while ((len1 = in.read(buffer)) > 0) {
f.write(buffer, 0, len1);
}
f.close();
} …Run Code Online (Sandbox Code Playgroud) 我想将文件保存在SD卡文件夹中.
我不能在我的项目上使用V4支持.
所以我打电话给:
Intent itent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
itent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
itent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
startActivityForResult(itent, requestCodeTree);
Run Code Online (Sandbox Code Playgroud)
然后在onActivityResult上,我有:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
if (resultCode == RESULT_OK) {
switch(requestCode) {
case requestCodeTree:
saveFile(intent.getData());
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
而saveFile的代码是:
private void saveFile(Uri data) {
ContentResolver contentResolver = context.getContentResolver();
InputStream in = null;
OutputStream out = null;
try {
// Problems start here ************************
Uri toUriFile= getUriBackupFile(context, data);
// ********************************************
if (toUriFile==null) {
Uri toUriFolder = DocumentsContract.buildDocumentUriUsingTree(data, DocumentsContract.getTreeDocumentId(data));
toUriFile …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个非常简单的图像下载应用程序.我想从这个网址下载所有图像到SD卡:https://www.dropbox.com/sh/5be3kgehyg8uzh2/AAA-jYcy_21nLBwnZQ3TBFAea
此代码适用于在imageview中加载图像:
package com.example.imagedownloadsample;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.widget.ImageView;
import com.squareup.picasso.Picasso;
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.image_download);
final ImageView img = (ImageView) (findViewById(R.id.imageView1));
// File file = new File(Environment.getExternalStorageDirectory(),
// "Android/data/com.usd.pop");
Picasso.with(getApplicationContext())
.load("http://8020.photos.jpgmag.com/3456318_294166_528c960558_m.jpg")
.into(img);
}
}
Run Code Online (Sandbox Code Playgroud)
但当我尝试这样下载图像到SD卡我最终与不幸的应用程序停止错误:
package com.example.imagedownloadsample;
import java.io.File;
import android.os.Bundle;
import android.os.Environment;
import android.support.v7.app.ActionBarActivity;
import com.squareup.picasso.Picasso;
import com.squareup.picasso.Target;
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.image_download);
//final ImageView img = (ImageView) …Run Code Online (Sandbox Code Playgroud) 如果该文件不存在,我想在外部存储中创建一个新文件。我已经在 SO 中阅读了类似的问题,并WRITE_EXTERNAL_STORAGE在我的清单中获得了许可。在使用 android 5.1 和 xperia t 使用 android 4.3 的 GenyMotion 模拟器上测试结果是一样的,我得到“打开失败:EACCES(权限被拒绝) ” file.createNewFile()。我检查了运行时,getExternalStorageStatefunctoin 返回值是 "MOUNTED "。
注意:如果我手动创建文件,我的代码可以完美运行并读取内容,这意味着可以访问外部存储。我虽然在我的代码中的另一个地方写入外部存储getExternalPublicStorage用于保存捕获的图像,但它工作正常!
File f = Environment.getExternalStorageDirectory();
File config = new File(f, "poinila config" + ".txt");
if (!config.exists()) {
if (!config.createNewFile()) {
// toast that creating directory failed
} else {
writeDefaultIpPort();
}
}
Run Code Online (Sandbox Code Playgroud)
编辑: 路径字符串是“/storage/sdcard0/poinila config.txt”
如何访问Android手机内部存储空间中的公共文档文件夹?我需要读取和写入可公开访问的文件到Documents文件夹中.
将一些文本写入Android设备上的文件似乎是一项重大努力.从这里给出的答案开始,我已将以下代码实现到我的单个"Hello-World"活动中:
try {
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(this.openFileOutput("config.txt", Context.MODE_PRIVATE));
outputStreamWriter.write("lalala");
outputStreamWriter.close();
} catch (IOException e) {
Log.e("Exception", "File write failed: " + e.toString());
}
Run Code Online (Sandbox Code Playgroud)
这不会引发异常,但似乎有效.但有没有办法"看到"使用File Manageron android 创建的文件?代码片段似乎写入android文件系统上与应用程序本身相关的"秘密"位置(由using控制this.openFileOutput).
File file = new File(this.getExternalFilesDir("temp"), "testfile.txt");
FileOutputStream fileOutput = openFileOutput(file.getName(), Context.MODE_WORLD_WRITEABLE);
fileOutput.write("lalala");
fileOutput.close();
Run Code Online (Sandbox Code Playgroud)
这会引发错误
Error:(55, 19) error: no suitable method found for write(String) method FileOutputStream.write(int) is not applicable (actual argument String cannot be converted to int by method invocation conversion) method …Run Code Online (Sandbox Code Playgroud)