我正在创建一个应用程序,每次按下载按钮,它都会在我的存储中创建一个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的新手,对此很少感到困惑,并且需要你们的帮助。
答案 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");}