Android如何为每次下载创建一个新文件?

时间:2018-01-30 05:26:58

标签: android android-intent android-file android-external-storage android-fileprovider

我正在创建一个应用程序,每次按下载按钮,它都会在我的存储中创建一个pdf文件。我的问题是新创建的文件用相同的文件名覆盖现有文件。我需要用新文件名下载。我是什么意思试图

      dirpath = 
      android.os.Environment.getExternalStorageDirectory().toString();
      // int increase=0;
       file = new File(dirpath+"/NewPDF.pdf");
       if(file.exists()){
           increase++;
           file = new File(dirpath + "/NewPDF" +increase+".pdf");}

上面的程序行创建文件,但我需要打开上一个下载文件

      Intent intent = new Intent(Intent.ACTION_VIEW);
      Uri uri = Uri.fromFile(new File( file,"/NewPDF.pdf"));
      intent.setDataAndType(uri, "application/pdf");
      intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
      startActivity(intent);

以上代码行会产生错误。

      Error:File no longer exist,the file maybe deleted or changed or 
     removed by another program

1.创建一个新文件,并在我单击按钮时防止覆盖 2.打开上次下载的文件 我是Android的新手,对此很少感到困惑,并且需要你们的帮助。

5 个答案:

答案 0 :(得分:1)

您拨打Uri uri = Uri.fromFile(new File( file,"/NewPDF.pdf"));打开文件,为什么添加了 /NewPDF.pdf ,因为它已经在您的文件中了。只需删除它。

替换此行

Uri uri = Uri.fromFile(new File( file,"/NewPDF.pdf"));

Uri uri = Uri.fromFile(new File( file));

答案 1 :(得分:0)

您为每个创建的文件指定相同的名称。尝试给出一个如下唯一名称:

UUID uuid = UUID.randomUUID();
String randomUUIDString = uuid.toString();

randomUUIDString将成为pdf文件的唯一字符串。另外,如果您希望使用它们,请将这些字符串存储在SQLite数据库中。

答案 2 :(得分:0)

您在意图中输入的路径与创建的文件路径不匹配。

试试这个。

dirpath = android.os.Environment.getExternalStorageDirectory().toString();
String lastFilePath = null;
      // int increase=0;
       file = new File(dirpath+"/NewPDF.pdf");
       if(file.exists()){
           increase++;
           file = new File(dirpath + "/NewPDF" +increase+".pdf");}
           lastFilePath =  file.getAbsolutePath();

然后你可以像这样打开文件。

Intent intent = new Intent(Intent.ACTION_VIEW);
      Uri uri = Uri.fromFile(new File(lastFilePath));
      intent.setDataAndType(uri, "application/pdf");
      intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
      startActivity(intent);

希望有所帮助:)

答案 3 :(得分:0)

if替换为while并显示Intent

dirpath = android.os.Environment.getExternalStorageDirectory().toString();
int increase = 0;
file = new File(dirpath+"/NewPDF.pdf");
while(file.exists()) {
    increase++;
    file = new File(dirpath + "/NewPDF" +increase+".pdf");
}
file.createNewFile();

... store data in file here ...

Intent intent = new Intent(Intent.ACTION_VIEW);
Uri uri = Uri.fromFile(file);
intent.setDataAndType(uri, "application/pdf");
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(intent);

答案 4 :(得分:0)

使用时间戳而不是计数器,这样您每次都可以创建一个新文件。

SimpleDateFormat formatter = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss", Locale.US);
    Date timeStamp = new Date();   

     dirpath = 
          android.os.Environment.getExternalStorageDirectory().toString();
          // int increase=0;
           file = new File(dirpath+"/NewPDF.pdf");
           if(file.exists()){
               increase++;
               file = new File(dirpath + "/NewPDF" +formatter.format(timeStamp )+".pdf");}