我正在尝试下载并将文件保存到SD卡。文件网址如下
http://test.com/net/Webexecute.aspx?fileId=120
此网址提供数据流。我有以下选项来读取输入流。
使用通用输入和输出流(没有处理程序连接失败 接管)
下载经理
使用HttpUrlConnection(可能的超时机会)
我已经使用选项a完成了下载。但是没有连接失败的处理程序。所以我决定选择b
DownloadManager dm = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
Request request = new Request(Uri.parse("http://test.com/net/Webexecute.aspx?fileId="+ fileId));
request.setMimeType("application/pdf");
request.setDescription("fileDownload");
request.setTitle(fileName);
request.setNotificationVisibility(Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
dm.enqueue(request);
正在下载文件。但是,该文件似乎已损坏。
在进行研究时,我从未发现DownloadManager用于获取输入流并将其保存到文件中。有什么我缺乏的吗?
答案 0 :(得分:0)
请更改您的代码以下载文件。
protected Void downLoadFile(String fileURL) {
int count;
try
{
URL url = new URL(fileURL);
URLConnection conexion = url.openConnection();
conexion.connect();
int lenghtOfFile = conexion.getContentLength();
InputStream is = url.openStream();
File testDirectory = new File(Environment.getExternalStorageDirectory() + "/Download");
if (!testDirectory.exists())
{
testDirectory.mkdir();
}
FileOutputStream fos = new FileOutputStream(testDirectory + "/filename.txt");
byte data[] = new byte[1024];
long total = 0;
int progress = 0;
while ((count = is.read(data)) != -1)
{
total += count;
int progress_temp = (int) total * 100 / lenghtOfFile;
fos.write(data, 0, count);
}
is.close();
fos.close();
readStringFromFile(testDirectory);
}
catch (Exception e)
{
Log.e("ERROR DOWNLOADING", "Unable to download" + e.getMessage());
e.printStackTrace();
}
return null;
Below方法用于从文件中读取字符串。
public String readStringFromFile(File file){
String response="";
try
{
FileInputStream fileInputStream= new FileInputStream(file+"/filename.txt");
StringBuilder builder = new StringBuilder();
int ch;
while((ch = fileInputStream.read()) != -1){
builder.append((char)ch);
}
response = builder.toString();
}
catch (FileNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return response;
}
让我知道你仍然面临任何问题..
由于