微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么没有数据写入文件?

如何解决为什么没有数据写入文件?

我创建了一个从 url 下载图像文件的应用程序,但文件中没有任何数据

图片网址: https://instagram.fidr1-1.fna.fbcdn.net/v/t51.2885-15/e35/190664842_184685183538740_5039921250568173600_n.jpg?tp=1&_nc_ht=instagram.fidr1-1.fna.fbcdn.net&_nc_cat=108&_nc_ohc=RrEU4lTwYCwAX-vgVQ4&edm=AABBvjUBAAAA&ccb=7-4&oh=3ac34be54793fa59134380fd9e0bd617&oe=60DCB7E6&_nc_sid=83d603

代码

@Override
protected Void doInBackground(String... strings) {

    try {
        URL url = new URL(strings[0]);
        HttpURLConnection con = (HttpURLConnection) url.openConnection();
        con.setRequestProperty("User-Agent","Mozilla/5.0 
        (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) 
        Gecko/20100316 Firefox/3.6.2");
        con.setRequestMethod("GET");
        con.setDoOutput(true);
        con.connect();

        File file = Environment.getExternalStorageDirectory();
        File f1 = new File(file,"_Url download");
        if(!f1.exists()){
            f1.mkdir();
        }

        fileName = System.currentTimeMillis() + ".jpg";

        File f2 = new File(f1,fileName);
        f2.createNewFile();

        InputStream er = con.getErrorStream();
        Log.i("ErrorCode",con.getResponseCode()+"");
        Log.i("ErrorMessage",con.getResponseMessage());
        Log.i("ErrorStream",er+"");

        InputStream in = con.getInputStream();
        FileOutputStream out = new FileOutputStream(f2);

        byte[] buffer = new byte[1024];
        int len;

        System.out.println(Arrays.toString(buffer));

        while((len = in.read(buffer,1024)) > 0) {
            out.write(buffer,len);
        }

        out.close();
        in.close();

    } catch (MalformedURLException e) {
        e.printstacktrace();
    } catch (ProtocolException e) {
        e.printstacktrace();
    } catch (IOException e) {
        Log.i("IOException",e.toString());
    }
    return null;
}

结果:

Image of file path where the file is being saved

编辑

下载按钮:

downloadButton.setonClickListener(v -> {
            if(ContextCompat.checkSelfPermission(this,Manifest.permission.READ_EXTERNAL_STORAGE)  != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},101);
            }
            if(ContextCompat.checkSelfPermission(this,Manifest.permission.WRITE_EXTERNAL_STORAGE)  != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},102);
            }
            else if(ContextCompat.checkSelfPermission(this,Manifest.permission.INTERNET)  != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.INTERNET},103);
            }
            else {
                BackgroundTask task = new BackgroundTask(this);
                task.execute(et.getText().toString());
            }
        });

清单权限:

<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.INTERNET"/>

EDIT2

日志:

2021-06-26 09:26:25.532 26760-26890/com.example.urldownload I/ErrorCode: 400

2021-06-26 09:26:25.533 26760-26890/com.example.urldownload I/ErrorMessage: Bad Request

2021-06-26 09:26:25.533 26760-26890/com.example.urldownload I/Errorstream: buffer(com.android.okhttp.internal.http.Http1xStream$FixedLengthSource@fbb2c70).inputStream()

2021-06-26 09:26:25.534 26760-26890/com.example.urldownload I/IOException: java.io.FileNotFoundException: https://instagram.fidr1-1.fna.fbcdn.net/v/t51.2885-15/e35/190664842_184685183538740_5039921250568173600_n.jpg?tp=1&_nc_ht=instagram.fidr1-1.fna.fbcdn.net&_nc_cat=108&_nc_ohc=RrEU4lTwYCwAX-vgVQ4&edm=AABBvjUBAAAA&ccb=7-4&oh=3ac34be54793fa59134380fd9e0bd617&oe=60DCB7E6&_nc_sid=83d603

解决方法

看看这个SO answersetDoOutput(true) 似乎将请求方法更改为 POST。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。