我正在尝试将我的文件保存到以下位置,
FileOutputStream fos = new FileOutputStream("/sdcard/Wallpaper/"+fileName);
但是我得到了异常java.io.FileNotFoundException
但是,当我把路径保存"/sdcard/"起来的时候.
现在我假设我无法以这种方式自动创建目录.
有人可以建议如何创建directory and sub-directory使用代码吗?
这开始是Android论坛上的一般用户问题.然而,它必然是一个编程问题.这是我的问题.
Android有一项服务 - MediaScanner - 它可以随时在后台运行(我相信)SD卡已卸载并重新安装.此服务收集卡上所有媒体文件的数据,并提供可由音乐应用程序查询的SQLite DB.大多数音乐应用程序都使用此服务,因为它可以节省与扫描SD卡相关的电量消耗.
自从我开始使用android以来,我一直遇到一个问题,即即使从SD卡中删除后,与该设备同步的M3U播放列表仍保留在此SQLite DB中.虽然卡上只有大约10个m3u的文件,但我现在已经收集了大约40个播放列表,这些播放列表出现在我使用的任何音乐应用程序中.剩余的播放列表不播放,并且是空的.我可以通过从音乐应用程序中删除它们来手动删除它们,但我厌倦了这样做.必须有更好的方法来删除这些鬼播放列表.
Android Market上有两个应用程序 - SDRescan和Music Scanner,据说可以做到这一点,但它们都不起作用.
我开始编写自己的应用程序来刷新或删除MediaStore数据库并从头开始,但我没有走得太远.我有一个运行以下代码的Android应用程序:
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
Uri.parse("file://" + Environment.getExternalStorageDirectory())));
Run Code Online (Sandbox Code Playgroud)
我在网上找到了一些这样的代码扫描SD卡的方法,但我没有任何运气.有小费吗?
完整代码:
package com.roryok.MediaRescan;
import android.app.Activity;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
public class MediaRescan extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
Uri.parse("file://" + Environment.getExternalStorageDirectory())));
setContentView(R.layout.main);
}
//Rescan the sdcard after copy the file
private void rescanSdcard() throws Exception{
Intent scanIntent = …Run Code Online (Sandbox Code Playgroud) import java.io.File;
File folder = new File(Environment.getExternalStorageDirectory() + "/TollCulator");
boolean success = true;
if (!folder.exists()) {
//Toast.makeText(MainActivity.this, "Directory Does Not Exist, Create It", Toast.LENGTH_SHORT).show();
success = folder.mkdir();
}
if (success) {
//Toast.makeText(MainActivity.this, "Directory Created", Toast.LENGTH_SHORT).show();
} else {
//Toast.makeText(MainActivity.this, "Failed - Error", Toast.LENGTH_SHORT).show();
}
Run Code Online (Sandbox Code Playgroud)
如果它不存在,上面应该在我的SD卡中创建一个文件夹,如果它没有做任何事情.虽然toast基于条件工作,但是当它不存在时它不会创建目录.知道怎么解决吗?
我Manifest看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.test.testing"
android:versionCode="1"
android:versionName="1.0" >
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-sdk
android:minSdkVersion="6"
android:targetSdkVersion="17" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.test.testing.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" …Run Code Online (Sandbox Code Playgroud) 我正在使用教程创建一个图库应用程序,但收到以下错误:
abc目录路径无效!请设置图像目录名AppConstant.java类
请访问以下链接以查看整个教程的代码,因为我使用相同的代码:
我在UtilsClass中找到了这段代码:
else {//图像目录为空Toast.makeText(_context,AppConstant.PHOTO_ALBUM +"为空.请加载一些图像!",Toast.LENGTH_LONG).show(); }
} else {
AlertDialog.Builder alert = new AlertDialog.Builder(_context);
alert.setTitle("Error!");
alert.setMessage(AppConstant.PHOTO_ALBUM
+ " directory path is not valid! Please set the image directory name AppConstant.java class");
alert.setPositiveButton("OK", null);
alert.show();
}
return filePaths;
Run Code Online (Sandbox Code Playgroud)
如何以编程方式创建缺少的目录而不是显示此错误对话框?
我一直在使用" Environment.getExternalStorage()"来存储和管理文件.并且logcat该方法没有警告信息并且工作得非常好.
但是,我的项目需要使用方法" Context.getExternalFilesDir(String type)"并且有一条警告消息
ContextImpl:无法确保目录:/ storage/external_SD/Android/data /(包名称)/ files
幸运的是,File对象工作正常(读取或写入或使文件夹工作).
但我想知道如何解决该警告信息.我错过了什么吗?
我有
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Run Code Online (Sandbox Code Playgroud)
在我的清单文件中,但是在尝试创建目录时失败了
Log.d(LOG_STRING, android.os.Environment.getExternalStorageState() );
java.io.File folder = new java.io.File(Environment.getExternalStorageDirectory() + java.io.File.separator + "test");
boolean success = true;
if (!folder.exists()) {
success = folder.mkdir();
}
if (success) {
Log.d(LOG_STRING, "Created directory");
} else {
Log.d(LOG_STRING, "FAILED WHILE CREATING DIRECTORY");
}
Run Code Online (Sandbox Code Playgroud)
外部存储的状态是"已挂载",但test无法创建目录并且输出为"FAILED WHILE CREATING DIRECTORY".
在手机中浏览"应用信息",标记为我的应用程序激活"修改或删除USB存储器内容"的权限.
可能是什么原因造成的?手机的一些特殊设置?这是搭载Android 4.3(API18)的三星GT-I9506.需要注意的是,getExternalStorageDirectory它不在SD卡上,而是在内部存储器(/storage/emulated/0/)上.
在与同事谈话时,似乎这个设备在被植根之后经历了几次调整(允许特定应用程序直接在SD卡上写入).可能不值得进一步调查,我只需切换到另一台设备.我会保留设备一段时间,如果有人会出现答案,我会快速测试它是否解决了问题.
问题仍然没有解决,但如前所述,这很可能是这个设备非常具体的.不可能在任何路径上写入,无论是外部存储还是内部存储,甚至不能在返回的路径中写入getExternalCacheDir().
我的开发手机是Nexus 5运行的Android 4.4.2.
在我的应用程序中,我试图在外部存储上创建一个文件夹,用于存储我的应用程序的调试信息.基本上它将包含应用程序执行的所有命令,因此当用户遇到问题时,我可以选择让他们从调试文件夹中发送信息进行分析.
我开始尝试将文件写入文件夹,但发现创建文件夹时出错.起初我正在使用mkdir(),然后我搬到了mkdirs()哪个也没用.
我有<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />我的清单.
以下是创建文件夹的代码:
File folder = new File(Environment.getExternalStorageDirectory() + "/DebugData");
String path = folder.getPath();
if(!folder.mkdirs() || !folder.exists()){
Log.e(LOG_TAG, path + " failed");
} else {
Log.d(LOG_TAG, path + " succeeded");
}
Run Code Online (Sandbox Code Playgroud)
这是我也尝试过的:
//Check SD card state
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state) || !Environment.MEDIA_MOUNTED.equals(state)) {
Log.e(LOG_TAG, "Error: external storage is read only or unavailable");
} else {
Log.d(LOG_TAG, "External storage is not read only …Run Code Online (Sandbox Code Playgroud)