0

サーバーからAndroid外部ストレージシステムに直接ファイルをストリーミングするためのコードを書き込もうとしています。

    private void streamPDFFileToStorage() {
    try {
        String downloadURL = pdfInfo.getFileServerURL();
        URL url = new URL(downloadURL);
        HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
        InputStream pdfFileInputStream = new BufferedInputStream(httpURLConnection.getInputStream());
        File pdfFile = preparePDFFilePath();
        OutputStream fileOutputStream = new BufferedOutputStream(new FileOutputStream(pdfFile));
        byte[] buffer = new byte[8012];
        int bytesRead;
        while ((bytesRead = pdfFileInputStream.read(buffer)) != -1) {
            fileOutputStream.write(buffer, 0, bytesRead);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

private File preparePDFFilePath() {
    File sdCard = Environment.getExternalStorageDirectory();
    File dir = new File (sdCard.getAbsolutePath() + "/dir1/dir2");
    dir.mkdirs();
    File file = new File(dir, "filename");
    return file;
    /*
    String pdfFileDirectoryPath = ApplicationDefaults.sharedInstance().getFileStorageLocation() + pdfInfo.getCategoryID();
    File pdfFileDirectory = new File(pdfFileDirectoryPath);
    pdfFileDirectory.mkdirs();
    return pdfFileDirectoryPath + "/ikevin" + ".pdf";
    */
}

「そのようなファイルまたはディレクトリはありません」という例外が発生し続けます

"OutputStream fileOutputStream = new BufferedOutputStream(new FileOutputStream(pdfFile));"

ファイルの書き方を教えてください。コードの何が問題になっていますか? (また、Context.getExternalFilesDir()コントローラーロジックコードからコンテキストを取得する方法がわからないため、使用していません。これがより良い解決策であるかどうか、誰にもアドバイスできますか?)

4

2 に答える 2

2

new Fileファイルではなくファイルオブジェクトを返しています。ストリームを開く前にファイルを作成したい場合があります。これを試して

File pdfFile = preparePDFFilePath();
boolean isCreated = pdfFile.createNewFile();
if(isCreated){
   OutputStream fileOutputStream = new BufferedOutputStream(new FileOutputStream(pdfFile));
}
于 2013-02-06T19:15:12.720 に答える
0

このコードは機能します:

    String root = Environment.getExternalStorageDirectory().toString();
    File dir = new File(root + "/dir1");    
    dir.mkdirs();
于 2013-02-06T19:10:26.467 に答える