我正在设备的内部存储器中创建一个目录,用于存储供应用程序使用的文件.我正在使用:
File dir = context.getDir(userfavorites, Context.MODE_PRIVATE);
Run Code Online (Sandbox Code Playgroud)
如果目录不存在,上面的代码将创建一个新目录,如果已经创建了目录,则返回现有文件对象.我想检查的是该目录包含的文件的编号和名称.如何使用此文件对象完成这项任务.
注意:我不想使用设备的外部存储器.我也不能避免创建目录,因为目录中的文件必须与不在目录中的其他文件分开.
更新的代码:
private static boolean IsFoldercontainsFiles(Context context) {
// TODO Auto-generated method stub
File dir = context.getDir(USER_FAV, Context.MODE_PRIVATE);
if (dir.exists()) {
if (dir.listFiles() == null){
return false;} //it never execute this line even though its null
else{
File childfile[] = dir.listFiles();
Log.i("file no is ", Integer.toString(childfile.length));
if (childfile.length == 0) {
return false;
} else {
return true;
}
}
} else {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
提前致谢
如何获取应用程序的所有应用程序首选项列表,
1.我保存共享偏好以这种方式
2.我知道,他们是在data/data/app_packagename/shared_prefs

3.问题:但是如何在微调器中获取所有首选xml文件的列表

并阅读每个偏好,我搜索了SO,但我没有找到任何关于此的帮助,如何读取我的应用程序目录中的所有首选项xml文件并访问首选项?
PS:我知道 SharedPreference.getAll();,一旦我拿到文件就足够了吗?
我写过比特(粗略代码),它试图运行时给出错误,这里是实现的方法
void getList()
{
//will be invoked from onCreate to populate spinner,yes spinner is already binded
PackageManager m = getPackageManager();
String s = getPackageName();
try {
PackageInfo p = m.getPackageInfo(s, 0);
s = p.applicationInfo.dataDir;
} catch (NameNotFoundException e) {
Log.w("yourtag", "Error Package name not found ", e);
}
Log.i("dir", s=s+"/shared_prefs");
//is this write way, how to proceed from here
}
Run Code Online (Sandbox Code Playgroud) android readfile android-preferences sharedpreferences android-file
对不起,如果已经回答了这个问题,但我不能很好地指出我的问题.我有一个活动,需要你的设备上的歌曲文件,当我按下按钮打开一个对话框询问你想要如何打开一个文件(比如选择一个文件浏览器)时,我想要它,然后用户将选择一个mp3文件(它应该可以输入内部存储器和外部存储器,至少可以输入用户可用的内存,例如我的Xperia V中有2个内部分区和SD卡),以及选择音乐文件时(.wav) ,.mp3,.acc文件)在我的应用程序中加载其名称和文件路径.我该怎么做?我没有提供任何代码,因为这就是我所需要的
我正在启动文件选择器,用户可以在其中选择要使用的pdf文件并将其上传到服务器。
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("file/*");
startActivityForResult(intent,1);
Run Code Online (Sandbox Code Playgroud)
当他们选择文件时,它会返回到onActivityResult我查看Uri文件的位置,以查看文件是否包含.pdf
if(requestCode == 1 && resultCode == RESULT_OK){
Uri filePath = data.getData();
File file = new File(filePath.getPath());
if(filePath.toString().contains(".pdf")){
if(file.length() <= 1048576){
de.setPDFUri(filePath.toString());
}else{
Toast.makeText(this,"PDF cannot be more than 1 MB, please select another", Toast.LENGTH_SHORT).show();
}
}else{
Toast.makeText(this,"Can only upload PDF files", Toast.LENGTH_SHORT).show();
}
}
Run Code Online (Sandbox Code Playgroud)
但是,这仅适用于某些文件管理器应用程序(Astro,Explorer),大多数时候我会得到这样的回报
file:///storage/sdcard0/Download/20131231103232738561744.pdf
Run Code Online (Sandbox Code Playgroud)
在其他程序上(到目前为止,我仅见过制造商内置的应用程序),我得到了这样的回报
content://media/external/file/109
Run Code Online (Sandbox Code Playgroud)
这显然不会告诉我有关文件及其类型的任何信息,并且不会返回该ContentProvider文件的信息。
有没有一种方法可以让用户仅.pdf通过发送意图来选择文件,或者有一种方法可以检查uri并确保它是.pdf文件?
在 Android 中,您可以使用 getFilesDir() 获取内部 /files/ 文件夹的路径,而 getCacheDir() 获取内部 /cache/ 文件夹的路径。
这两个文件夹之间唯一的功能区别是Android可能会在需要时自动清除缓存目录中的某些文件吗?
我试图了解在哪些情况下使用缓存文件夹是个好主意。
在我的应用程序中,有一些用户可以下载的文件.文件通过android下载管理器下载.但是,几周以来,数百名用户一直在抱怨他们的文件每8-12天自动删除一次,甚至没有他们卸载应用程序.(可能会有更多用户不愿意抱怨同样的问题.)
现在,可能存在许多用户特定的原因,为什么会在少数设备上发生这种情况.但考虑到大量的用户,似乎我可能做错了什么.
为什么系统/下载管理器会自动删除文件?有没有办法通知系统或下载管理器不删除某些文件?或者我应该在下载后重新命名文件,以便将它们与下载管理器取消链接,并希望问题能够解决?
编辑:
这是我用来下载文件的代码:
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(trackLink));
request.setTitle(trackTitle);
request.setDestinationInExternalPublicDir("Tracks", trackTitle + ".mp3");
request.setVisibleInDownloadsUi(false);
DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
manager.enqueue(request);
Run Code Online (Sandbox Code Playgroud) 有人知道Android上的ProcessKiller进程吗?看来它杀死了我的应用程序,因为它有一个打开的文件。当我将文件下载到 SD 卡,然后在下载过程中拔出卡时,就会发生这种情况。这就是 logcat 所说的。
E/ProcessKiller( 2447): Process com.example.myapp (24090) has open file /storage/sda1/MyRecordings/81321226.recording/downloading/00000149.ts
E/ProcessKiller( 2447): Process com.example.myapp (24090) has open file /storage/sda1/MyRecordings/81321226.recording/downloading/00000149.ts
E/ProcessKiller( 2447): Process com.example.myapp (24090) has open file /storage/sda1/MyRecordings/81321226.recording/downloading/00000149.ts
E/ProcessKiller( 2447): Process com.example.myapp (24090) has open file /storage/sda1/MyRecordings/81321226.recording/downloading/00000149.ts
E/ProcessKiller( 2447): Process com.example.myapp (24090) has open file /storage/sda1/MyRecordings/81321226.recording/downloading/00000149.ts
E/ProcessKiller( 2447): Process com.example.myapp (24090) has open file /storage/sda1/MyRecordings/81321226.recording/downloading/00000149.ts
E/ProcessKiller( 2447): Process com.example.myapp (24090) has open file /storage/sda1/MyRecordings/81321226.recording/downloading/00000149.ts
E/ProcessKiller( 2447): Process com.example.myapp (24090) has open file /storage/sda1/MyRecordings/81321226.recording/downloading/00000149.ts
Run Code Online (Sandbox Code Playgroud)
我无法正确关闭该文件,因为它是我下载的临时文件,当用户在下载过程中拔出 SD 卡时会发生这种情况。所以我无法再访问该文件,因此无法关闭 …
我想将我的位图保存到缓存目录.我用这个代码:
try {
File file_d = new File(dir+"screenshot.jpg");
@SuppressWarnings("unused")
boolean deleted = file_d.delete();
} catch (Exception e) {
// TODO: handle exception
}
imagePath = new File(dir+"screenshot.jpg");
FileOutputStream fos;
try {
fos = new FileOutputStream(imagePath);
bitmap.compress(CompressFormat.JPEG, 100, fos);
fos.flush();
fos.close();
} catch (FileNotFoundException e) {
Log.e("GREC", e.getMessage(), e);
} catch (IOException e) {
Log.e("GREC", e.getMessage(), e);
}
}
Run Code Online (Sandbox Code Playgroud)
它工作正常.但是,如果我想将不同的img保存到相同的路径,那么就会出现问题.我的意思是它被保存到相同的路径,但我看到它的旧图像,但当我点击图像,我可以看到我第二次保存的正确图像.
也许它来自缓存,但我不想看到旧图像,因为当我想与whatsapp旧图像共享该图像时,如果我发送图像似乎是正确的.
我想在whatsapp上分享已保存的图像,如下代码:
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(imagePath));
shareIntent.setType("image/jpeg");
startActivityForResult(Intent.createChooser(shareIntent, getResources().getText(R.string.title_share)),whtsapp_result);
Run Code Online (Sandbox Code Playgroud)
我该如何解决?
提前致谢.
android android-layout android-imageview android-file android-bitmap
我的资产中有一个数据库文件,我将其复制到应用程序数据库文件夹中。复制后(它有效),我想用 SQLCipher 加密复制的数据库。
出于某种原因,我收到此错误:
Database: sqlite returned: error code = 26, msg = statement aborts at 5: [ATTACH DATABASE '/data/user/0/com.grandeguru.lagmeup/databases/AIRPORTS_DB.db' AS encrypted KEY 'password';] file is encrypted or is not a database
如果我用根资源管理器查看数据库,它仍然没有加密和可见,所以我认为错误与 encrypt 方法中的文件逻辑有关。
这是我创建的 DatabaseHelper 类的代码,它也管理来自资产的副本:
public class DatabaseHelper extends SQLiteOpenHelper {
private SQLiteDatabase myDB;
private Context context;
public static String DB_NAME = "AIRPORTS_DB.db";
public static String DB_PATH = "/data/data/com.grandeguru.lagmeup/databases/";
public static final int DB_VERSION = 1;
public DatabaseHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
myDB.loadLibs(context);
this.context = …Run Code Online (Sandbox Code Playgroud) 对于Android,以下代码返回一个Uri,可用于创建与目录对应的DocumentFile。
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
startActivityForResult(intent, REQUEST_CODE_CUSTOM_FOLDER);
Run Code Online (Sandbox Code Playgroud)
由于库的许多方法都需要一个参数为 java.io.File,我想知道是否可以从 DocumentFile 中获取 java.io.File。
例如,返回的文档树 Uri treeUri 如下:
treeUri.getPath():/tree/primary:DCIM/deeper/evendeeper
treeUri.toString(): content://com.android.externalstorage.documents/tree/primary%3ADCIM%2Fdeeper%2Fevendeeper
Run Code Online (Sandbox Code Playgroud)
android ×10
android-file ×10
caching ×1
database ×1
documentfile ×1
encryption ×1
mp3 ×1
readfile ×1
sqlcipher ×1