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

Android how to create a new file for each download?

我正在创建一个应用程序,每次按下下载按钮时它都会在我的 storage.My 中创建一个 pdf 文件 storage.My 问题是新创建的文件会用相同的文件覆盖现有文件 name.I 需要下载新 filename.What 我正在尝试

      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.create 一个新文件并在我点击按钮时防止覆盖 2.open 最后下载的文件 我是 Android 的新手,对此有点困惑,需要你们的帮助。

您正在为您创建的每个文件分配相同的名称。尝试像这样给出一个唯一的名称:

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

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

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

试试这个。

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);

希望对您有所帮助:)

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);

您调用 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));

使用Time stamp代替Counter,这样每次都可以创建一个新文件。

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");}