标签: android-file

Android如何检查目录中的文件数

我正在设备的内部存储器中创建一个目录,用于存储供应用程序使用的文件.我正在使用:

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)

提前致谢

android android-file

7
推荐指数
3
解决办法
2万
查看次数

Android:如何获取我的应用程序的所有首选项xml的列表并阅读它们?

如何获取应用程序的所有应用程序首选项列表,

1.我保存共享偏好以这种方式用于将键值对保存在所需首选项xml中的活动

2.我知道,他们是在data/data/app_packagename/shared_prefs 首选项Xml的shared_pref文件夹


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

7
推荐指数
1
解决办法
8134
查看次数

Android选择mp3文件

对不起,如果已经回答了这个问题,但我不能很好地指出我的问题.我有一个活动,需要你的设备上的歌曲文件,当我按下按钮打开一个对话框询问你想要如何打开一个文件(比如选择一个文件浏览器)时,我想要它,然后用户将选择一个mp3文件(它应该可以输入内部存储器和外部存储器,至少可以输入用户可用的内存,例如我的Xperia V中有2个内部分区和SD卡),以及选择音乐文件时(.wav) ,.mp3,.acc文件)在我的应用程序中加载其名称和文件路径.我该怎么做?我没有提供任何代码,因为这就是我所需要的

mp3 android android-file

7
推荐指数
2
解决办法
1万
查看次数

从意图中获取所选文件的文件扩展名

我正在启动文件选择器,用户可以在其中选择要使用的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 android-intent android-file

7
推荐指数
1
解决办法
1782
查看次数

getFilesDir() 与 getCacheDir()

在 Android 中,您可以使用 getFilesDir() 获取内部 /files/ 文件夹的路径,而 getCacheDir() 获取内部 /cache/ 文件夹的路径。

这两个文件夹之间唯一的功能区别是Android可能会在需要时自动清除缓存目录中的某些文件吗?

我试图了解在哪些情况下使用缓存文件夹是个好主意。

android caching android-file

7
推荐指数
1
解决办法
1987
查看次数

下载的文件会自动删除

在我的应用程序中,有一些用户可以下载的文件.文件通过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 android-file android-download-manager

7
推荐指数
2
解决办法
7221
查看次数

什么是 Android ProcessKiller?

有人知道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 卡时会发生这种情况。所以我无法再访问该文件,因此无法关闭 …

android android-networking android-file

6
推荐指数
0
解决办法
2219
查看次数

如何才能第二次正确保存我的位图?

我想将我的位图保存到缓存目录.我用这个代码:

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

6
推荐指数
1
解决办法
303
查看次数

在 Android 中使用 SQLCipher 加密现有数据库

我的资产中有一个数据库文件,我将其复制到应用程序数据库文件夹中。复制后(它有效),我想用 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)

database encryption android android-file sqlcipher

6
推荐指数
1
解决办法
2888
查看次数

是否可以从 DocumentFile 获取常规文件?

对于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)

以下是ADM中显示的目录: 在此处输入图片说明

android android-file storage-access-framework documentfile

6
推荐指数
1
解决办法
5464
查看次数