尽管这是一个简单的问题,但我无法在google或stackoverflow上找到答案。
当我使用以下代码时,我得到这个结果//com.android.externalstorage.documents/tree/primary:Podcasts
var intent = new Intent(Intent.ActionOpenDocumentTree);
intent.PutExtra("android.content.extra.SHOW_ADVANCED", true);
intent.PutExtra("android.content.extra.FANCY", true);
intent.PutExtra("android.content.extra.SHOW_FILESIZE", true);
Run Code Online (Sandbox Code Playgroud)
你能帮我理解我的结果的各个部分吗?
我想Bitmap在文件上写一个Object.这是我的代码:
File f = new File(path + "-bw.jpg");
OutputStream fileStream = new BufferedOutputStream(new FileOutputStream(path + "-bw.jpg"));
image.getBitmap().compress(Bitmap.CompressFormat.JPEG, 100, fileStream);
fileStream.close();
Run Code Online (Sandbox Code Playgroud)
以下是堆栈跟踪:
1-11 09:56:05.553: D/dalvikvm(277): GC_EXTERNAL_ALLOC freed 385 objects / 15832 bytes in 69ms
11-11 09:56:05.733: D/dalvikvm(277): GC_EXTERNAL_ALLOC freed 32 objects / 34048 bytes in 51ms
11-11 09:56:05.923: E/Save error(277): /mnt/sdcard/Water lilies-bw.jpg (Permission denied)
11-11 09:56:05.923: E/Save error(277): java.io.FileNotFoundException: /mnt/sdcard/Water lilies-bw.jpg (Permission denied)
11-11 09:56:05.923: E/Save error(277): at org.apache.harmony.luni.platform.OSFileSystem.openImpl(Native Method)
11-11 09:56:05.923: E/Save error(277): at org.apache.harmony.luni.platform.OSFileSystem.open(OSFileSystem.java:152)
11-11 09:56:05.923: E/Save …Run Code Online (Sandbox Code Playgroud) 我正在尝试将文件写入Android上的外部存储位置.这是我的代码:
String state = Environment.getExternalStorageState();
if(Environment.MEDIA_MOUNTED.equals(state)) {
saveState= true;
File pPath= Environment.getExternalStorageDirectory();
if(!pPath.exists()) {
boolean bReturn= pPath.mkdirs();
Log.d(TAG, "mkdirs returned: " + bReturn);
}
try {
File pFile= new File(pPath, "output.pcm");
pFile.createNewFile();
outputLocation= pFile.getAbsolutePath().toString();
} catch (IOException e) {
Log.d(TAG, "Could not create file: " + e.toString());
saveState= false;
}
} // end if we can read/write to the external storage
Run Code Online (Sandbox Code Playgroud)
对createNewFile()的调用返回"无法创建文件:java.io.IOException:权限被拒绝"
我的清单文件中有android.permission.WRITE_EXTERNAL_STORAGE.关于这个问题似乎有很多问题,这解决了大部分问题,但我仍然遇到这个问题.这是清单的一部分:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="company.example.sample"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="10" />
<permission android:name="android.permission.RECORD_AUDIO"></permission>
<permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"></permission>
<permission …Run Code Online (Sandbox Code Playgroud) 这是我的代码:
boolean success = false;
Log.d(TAG, Environment.getExternalStorageDirectory() + "/" + Environment.DIRECTORY_PICTURES + "/myFolder" );
myFolder = new File( Environment.getExternalStorageDirectory() + "/" + Environment.DIRECTORY_PICTURES + "/myFolder" );
if( myFolder.exists() ){
Log.d(TAG, "FOLDER EXISTS");
}else{
success = myFolder.mkdir();
if( success ){
// Do something on success
} else {
// Do something else on failure
throw new RuntimeException("File Error in writing new folder");
}
Run Code Online (Sandbox Code Playgroud)
怎么了?
运行它将HTC Desire HD - android 2.3.5导致此输出:
D/DVA_HLUI Application(25723): /mnt/sdcard/Pictures/myFolder
E/AndroidRuntime(25723): FATAL EXCEPTION: main
E/AndroidRuntime(25723): java.lang.RuntimeException: …Run Code Online (Sandbox Code Playgroud) 我有一些代码在SD卡上创建/获取文件夹:
if( hasSDCard() ){
UUID uniqueFileName = UUID.randomUUID();
mediaStorageDir = new File(
getExternalImageStoragePath(),
"MyApp");
if ( ! mediaStorageDir.exists() ){
if( ! mediaStorageDir.mkdirs() ){
MyLogger.Error("Create image directory FAILED. path: " + mediaStorageDir.getPath());
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
并且我在我的清单文件中注册了许可:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STOREAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
Run Code Online (Sandbox Code Playgroud)
但是当我运行它时,会打印:
Create image directory FAILED. path: /storage/emulated/0/Pictures/MyApp
Run Code Online (Sandbox Code Playgroud)
我想知道为什么会这样?
===更新===
我尝试了所有这些:
/**
* get external storage directory path for image
* @return
*/
public static String getExternalImageStoragePath(){
String strPath = "";
if(hasSDCard()){
//strPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getPath();
//strPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath();
//strPath = Environment.getExternalStorageDirectory().getPath(); …Run Code Online (Sandbox Code Playgroud) 这是我的第一个Android应用程序,也是我第一次尝试写入文件.我正在尝试根据这些说明捕获日志,而我正在获取FileNotFoundExeption ENOENT (No such file or directory).这很公平,因为目录不存在.但那我该如何创建目录呢?或者使用另一个?我不知道在哪里编写日志以便通过电子邮件发送它们的最佳实践,我也不知道如何为它们创建新目录.
这是我正在尝试使用的路径.
String path = Environment.getExternalStorageDirectory() + "/" + "MyFirstApp/";
String fullName = path + "mylog";
File file = new File (fullName);
Run Code Online (Sandbox Code Playgroud) 我试图在Android设备上找到包含图像(内部和外部存储)的所有目录.
基本上,我尝试获取本机库应用程序中列出的所有目录
例如:
如何实现这一目标?我认为它与MediaStorage.Images.Media等有关,但文档在那里并不是很有帮助,很多谷歌搜索也没有帮助.
我想让用户在 Android 中的特定文件夹下选择一个文件,无论是使用内置 ui 还是第三方文件管理器。但是,我无法在较新版本的 android 上执行此操作ACTION_OPEN_DOCUMENT。我阅读了有关需要 DocumentProvider 来提供内容 uri 的文档,但是我对此感到非常困惑,因为没有“内置”的,而且根据文档,实现您自己的此类内容的目的似乎是将文件提供给其他的这不是我想要在这里做的。
在 android 实际上禁止file://uri 之前,我所做的是使用 ACTION_GET_CONTENT 和 'file://' uri 来与大多数第三方文件管理器应用程序一起使用。因此,如果有人知道 7.0 之后支持该功能的一些技巧,我也会很感激。
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
Uri uri = Uri.parse(Environment.getExternalStorageDirectory() + "/myFolder/");
intent.setType("text/csv");
DocumentFile file = DocumentFile.fromSingleUri(getApplicationContext(), uri);
intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, file.getUri());
intent.putExtra("android.content.extra.SHOW_ADVANCED", true);
intent.putExtra("android.content.extra.FANCY", true);
intent.putExtra("android.content.extra.SHOW_FILESIZE", true);
try {
startActivityForResult(intent, 1);
} catch (android.content.ActivityNotFoundException ex) {
Toast.makeText(getApplicationContext(), "Please install a File Manager.", Toast.LENGTH_SHORT).show();
}
Run Code Online (Sandbox Code Playgroud)
这段代码只会进入“最近”文件夹,而不是我拥有的文件夹。
编辑:当我尝试实施建议的解决方案时发生错误.请查看以下附加信息.如果可以,请帮助我,提前谢谢!
好的,所以我最终得到了我的应用程序来创建和写入最近的文件.
在模拟器上,这非常有效.但是,当我将应用程序上传到手机并尝试adb shell进入手机时.我无法访问手机中包含该文件的目录.
目录是/data/data/cpe495.smartapp/files/.当我尝试更改目录时,它告诉我我没有权限.
我假设这是因为我的手机没有根,而且我不在root帐户中.根植我的手机不是我要做的事情.
有没有办法,我可以创建这个文件并写入它,并能够adb pull从我的手机?这是我创建文件的当前方式:
fOut = tThis.openFileOutput("test.csv", tThis.MODE_APPEND);
Run Code Online (Sandbox Code Playgroud)
提前致谢!!
还是行不通
我已将以下代码添加到我的应用程序中,当我运行它时,当它尝试将文件写入SD卡时,它失败并出现以下错误,请帮助我!
String inFileName = "/data/data/cpe495.smartapp/files/test.csv"; //TODO Use folder/filename
File inFile = new File(inFileName);
try{
FileInputStream fis = new FileInputStream(inFile);
String outFileName = Environment.getExternalStorageDirectory()+"/test.csv"; //TODO Use output filename
OutputStream output = new FileOutputStream(outFileName);
byte[] buffer = new byte[1024];
int length;
while ((length = fis.read(buffer))>0)
output.write(buffer, 0, length);
output.flush();
output.close();
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
04-05 23:20:11.551: WARN/System.err(285): …Run Code Online (Sandbox Code Playgroud) 我得到了我的文件下载方法,我是从教程中做到的:
InputStream input;
try
{
URL url = new URL(strURL);
input = url.openStream();
byte[] buffer = new byte[1500];
File OpenGuideFolder = new File("/sdcard/MyFiles/");
OpenGuideFolder.mkdirs();
OutputStream output = new FileOutputStream(OpenGuideFolder.toString() + "/" + id + "_" + pos + "_normal.png");
try
{
int bytesRead = 0;
while ((bytesRead = input.read(buffer, 0, buffer.length)) >= 0)
{
output.write(buffer, 0, bytesRead);
for(int i =0;i<buffer.length;i++)
{
Log.i("buffer.length", Integer.toString(buffer.length));
}
}
}
finally
{
output.close();
buffer = null;
}
}
catch (Exception e)
{
Log.i("Download Pictures …Run Code Online (Sandbox Code Playgroud)