Java Android:如何更改下载文件的文件名?
我想在xml文件的帮助下更改从internet下载的文件的文件名:Java Android:如何更改下载文件的文件名?,java,android,url,download,filenames,Java,Android,Url,Download,Filenames,我想在xml文件的帮助下更改从internet下载的文件的文件名: <?xml version="1.0" encoding="ISO-8859-1" ?> <Phonebook> <PhonebookEntry> <firstname>Michael</firstname> <lastname>De Leon</lastname> <Addre
<?xml version="1.0" encoding="ISO-8859-1" ?>
<Phonebook>
<PhonebookEntry>
<firstname>Michael</firstname>
<lastname>De Leon</lastname>
<Address>5, Cat Street</Address>
<FileURL>http://www.technobuzz.net/wp-content/uploads/2009/09/Android-Emulator.jpg</FileURL>
</PhonebookEntry>
<PhonebookEntry>
<firstname>John</firstname>
<lastname>Smith</lastname>
<Address>6, Dog Street</Address>
<FileURL>http://www.cellphonehits.net/uploads/2008/10/android_openmoko.jpg</FileURL>
</PhonebookEntry>
<PhonebookEntry>
<firstname>Jember</firstname>
<lastname>Dowry</lastname>
<Address>7, Monkey Street</Address>
<FileURL>http://www.techdigest.tv/android.jpg</FileURL>
</PhonebookEntry>
</Phonebook>
迈克尔
德莱昂
猫街5号
http://www.technobuzz.net/wp-content/uploads/2009/09/Android-Emulator.jpg
约翰
史密斯
狗街6号
http://www.cellphonehits.net/uploads/2008/10/android_openmoko.jpg
詹伯
嫁妆
猴子街七号
http://www.techdigest.tv/android.jpg
我的程序有以下代码:
package com.example.parsingxml;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Iterator;
import java.util.List;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.widget.TextView;
public class ParsingXML extends Activity {
public static final int DIALOG_DOWNLOAD_PROGRESS = 0;
private ProgressDialog mProgressDialog;
public String FileName = "";
public String FileURL = "";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
/* Create a new TextView to display the parsingresult later. */
TextView tv = new TextView(this);
tv.setText("This is the parsing program...");
try {
/* Create a URL we want to load some xml-data from. */
URL url = new URL("http://cloud.eacomm.com/jm/sampleXML.xml");
url.openConnection();
/* Get a SAXParser from the SAXPArserFactory. */
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
/* Get the XMLReader of the SAXParser we created. */
XMLReader xr = sp.getXMLReader();
/* Create a new ContentHandler and apply it to the XML-Reader*/
ExampleHandler myExampleHandler = new ExampleHandler();
xr.setContentHandler(myExampleHandler);
/* Parse the xml-data from our URL. */
xr.parse(new InputSource(url.openStream()));
/* Parsing has finished. */
/* Our ExampleHandler now provides the parsed data to us. */
List<ParsedExampleDataSet> parsedExampleDataSet = myExampleHandler.getParsedData();
/* Set the result to be displayed in our GUI. */
//tv.setText(parsedExampleDataSet.toString());
Iterator i;
i = parsedExampleDataSet.iterator();
ParsedExampleDataSet dataItem;
while(i.hasNext()){
dataItem = (ParsedExampleDataSet) i.next();
tv.append("\n" + dataItem.getfirstname());
tv.append("\n" + dataItem.getFileURL());
tv.append("\n" + dataItem.getAddress());
this.FileName = dataItem.getfirstname() + ".jpg";
this.FileURL = dataItem.getFileURL();
startDownload();
}
} catch (Exception e) {
/* Display any Error to the GUI. */
tv.setText("Error: " + e.getMessage());
}
/* Display the TextView. */
this.setContentView(tv);
}
private void startDownload(){
new DownloadFileAsync().execute(FileURL);
}
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DIALOG_DOWNLOAD_PROGRESS:
mProgressDialog = new ProgressDialog(this);
mProgressDialog.setMessage("Downloading file..");
mProgressDialog.setIndeterminate(false);
mProgressDialog.setMax(100);
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
mProgressDialog.setCancelable(true);
mProgressDialog.show();
return mProgressDialog;
default:
return null;
}
}
class DownloadFileAsync extends AsyncTask<String, String, String>{
@Override
protected void onPreExecute() {
super.onPreExecute();
showDialog(DIALOG_DOWNLOAD_PROGRESS);
}
@Override
protected String doInBackground(String... aurl) {
try {
File root = Environment.getExternalStorageDirectory();
URL u = new URL(FileURL);
HttpURLConnection c = (HttpURLConnection) u.openConnection();
c.setRequestMethod("GET");
c.setDoOutput(true);
c.connect();
int lenghtOfFile = c.getContentLength();
FileOutputStream f = new FileOutputStream(new File(root + "/download/", FileName));
InputStream in = c.getInputStream();
byte[] buffer = new byte[1024];
int len1 = 0;
long total = 0;
while ((len1 = in.read(buffer)) > 0) {
total += len1; //total = total + len1
publishProgress("" + (int)((total*100)/lenghtOfFile));
f.write(buffer, 0, len1);
}
f.close();
} catch (Exception e) {
Log.d("Downloader", e.getMessage());
}
return null;
}
protected void onProgressUpdate(String... progress) {
Log.d("ANDRO_ASYNC",progress[0]);
mProgressDialog.setProgress(Integer.parseInt(progress[0]));
}
@Override
protected void onPostExecute(String unused) {
dismissDialog(DIALOG_DOWNLOAD_PROGRESS);
}
}
}
package com.example.parsingxml;
导入java.io.File;
导入java.io.FileOutputStream;
导入java.io.InputStream;
导入java.net.HttpURLConnection;
导入java.net.URL;
导入java.util.Iterator;
导入java.util.List;
导入javax.xml.parsers.SAXParser;
导入javax.xml.parsers.SAXParserFactory;
导入org.xml.sax.InputSource;
导入org.xml.sax.XMLReader;
导入android.app.Activity;
导入android.app.Dialog;
导入android.app.ProgressDialog;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.os.Environment;
导入android.util.Log;
导入android.widget.TextView;
公共类ParsingXML扩展活动{
公共静态最终整型对话框\u下载\u进度=0;
private ProgressDialog mProgressDialog;
公共字符串FileName=“”;
公共字符串FileURL=“”;
/**在首次创建活动时调用*/
@凌驾
创建公共空间(捆绑冰柱){
超级冰柱;
/*创建一个新的TextView,以便稍后显示ParsinResult*/
TextView tv=新的TextView(此);
setText(“这是解析程序…”);
试一试{
/*创建要从中加载一些xml数据的URL*/
URL=新URL(“http://cloud.eacomm.com/jm/sampleXML.xml");
openConnection();
/*从SAXPArserFactory获取SAXParser*/
SAXParserFactory spf=SAXParserFactory.newInstance();
SAXParser sp=spf.newSAXParser();
/*获取我们创建的SAXParser的XMLReader*/
XMLReader xr=sp.getXMLReader();
/*创建新的ContentHandler并将其应用于XML读取器*/
ExampleHandler myExampleHandler=新建ExampleHandler();
xr.setContentHandler(myExampleHandler);
/*从我们的URL解析xml数据*/
parse(新输入源(url.openStream());
/*解析已完成*/
/*我们的ExampleHandler现在向我们提供解析的数据*/
List parsedExampleDataSet=myExampleHandler.getParsedData();
/*将结果设置为显示在GUI中*/
//tv.setText(parsedExampleDataSet.toString());
迭代器i;
i=parsedExampleDataSet.iterator();
ParsedExampleDataSet数据项;
while(i.hasNext()){
dataItem=(ParsedExampleDataSet)i.next();
追加(“\n”+dataItem.getfirstname());
追加(“\n”+dataItem.getFileURL());
追加(“\n”+dataItem.getAddress());
this.FileName=dataItem.getfirstname()+“.jpg”;
this.FileURL=dataItem.getFileURL();
startDownload();
}
}捕获(例外e){
/*向GUI显示任何错误*/
tv.setText(“错误:+e.getMessage());
}
/*显示文本视图*/
这个.setContentView(电视);
}
私有void startDownload(){
新建DownloadFileAsync().execute(FileURL);
}
@凌驾
受保护的对话框onCreateDialog(int id){
开关(id){
案例对话框\u下载\u进度:
mProgressDialog=新建进度对话框(此);
设置消息(“下载文件…”);
mProgressDialog.setUndeterminate(false);
mProgressDialog.setMax(100);
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_水平);
mProgressDialog.setCancelable(真);
mProgressDialog.show();
返回mProgressDialog;
违约:
返回null;
}
}
类DownloadFileAsync扩展AsyncTask{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
showDialog(对话框下载进度);
}
@凌驾
受保护的字符串背景(字符串…aurl){
试一试{
文件root=Environment.getExternalStorageDirectory();
URL u=新URL(FileURL);
HttpURLConnection c=(HttpURLConnection)u.openConnection();
c、 setRequestMethod(“GET”);
c、 设置输出(真);
c、 connect();
int lenghtOfFile=c.getContentLength();
FileOutputStream f=新的FileOutputStream(新文件(root+“/download/”,FileName));
InputStream in=c.getInputStream();
字节[]缓冲区=新字节[1024];
int len1=0;
长总计=0;
而((len1=in.read(buffer))>0){
total+=len1;//total=total+len1
出版进度(“+(int)((总计*100)/长度文档));
f、 写入(缓冲区,0,len1);
}
f、 close();
}捕获(例外e){
Log.d(“Downloader”,e.getMessage());
}
返回null;
}
受保护的void onProgressUpdate(字符串…进度){
Log.d(“ANDRO_ASYNC”,progress[0]);
mProgressDialog.setProgress(Integer.parseInt(progress[0]));
}
@凌驾
受保护的void onPostExecute(字符串未使用){
new DownloadFileAsync().execute(currentUrl, currentFile);
@Override
protected String doInBackground(String... strings) {
String url = strings[0];
String fileName = strings[1];
...
}
while(i.hasNext()) {
...
this.FileName = dataItem.getfirstname() + ".jpg";
...
startDownload();
}