当前位置: 首页 > 知识库问答 >
问题:

将文件转换为字节数组时出错。java.ioFileNotFoundException

唐兴发
2023-03-14

我试图让用户从gallery中选择一幅图像,在imageView中显示它,同时创建同一文件的字节数组。

调试后:

'new File(filepath)'使用有效的文件系统路径执行没有问题。

但是它总是跳过'ByteArrayOutputStream baos=new ByteArrayOutputStream();'到带有java.ioFileNotFoundException的IOException

知道我做错了什么吗?

或者有没有更有效的方法可以将文件的一个字节转换为HEX字符,并发送每个HEX字符,直到文件的最后一个字节?

try {
                    File myFile = new File(imageUri.getPath());
                    String filepath = myFile.getAbsolutePath();
                    Log.d("onActivityResult", "filepath: " + filepath);
                    FileOutputStream fos = new FileOutputStream ( new File(filepath) );
                    ByteArrayOutputStream baos = new ByteArrayOutputStream();

                    // Put data in your baos

                    baos.writeTo(fos);
                } catch(IOException ioe) {
                    // Handle exception here
                    ioe.printStackTrace();
                    Toast.makeText(this, "Byte buffer error.", Toast.LENGTH_LONG).show();
                }

共有1个答案

闽涵蓄
2023-03-14

知道我做错了什么吗?

您认为Uri总是指向一个文件。

如果Uri的方案是file,那么getPath()将是文件系统路径。根据您如何获得Uri,该文件系统路径可能是可用的。

大多数情况下,Uri将具有不同的方案,通常是内容。对于这样一个Uri来说,getPath()是没有意义的,就像getPath()对于类似于https://stackoverflow.com/questions/46457384/error-when-converting-file-to-byte-array-java-iofilenotfoundexception

对于具有content(或file,或android.resource)方案的Uri,使用ContentResolveropenInputStream()获取Uri标识的内容上的InputStream

即使修复了该问题,大多数情况下也会出现OutOfMemoryError崩溃,因为没有一块连续的可用堆空间来加载用户选择的整个内容。

 类似资料:
  • 因此,在升级build.gradle(project)后运行项目时,我收到以下错误 至

  • 我试图将我的类组件转换为功能组件,但我的过滤器不再工作了。 主要的错误是当我想转换listProducts因为我不知道如何定义与useState为这种情况下的preState 如何能为情况更新状态? 这是我的密码 类组件 功能成分

  • 问题内容: 我正在尝试将字节数组转换为ZIP文件。我使用以下代码获取字节: 但是我现在的问题是将字节数组转换回ZIP文件-如何完成? 注意:指定的ZIP包含两个文件。 问题答案: 要从字节中获取内容,可以使用

  • 问题内容: 我发现了将文件转换为字节数组并将字节数组写入存储中文件的多种方法。 我想要的是转换为字节数组,然后将字节数组转换回。 我不想像以下那样将其写出到存储中: 我想以某种方式执行以下操作: 问题答案: 我认为您误解了班级的真正含义。它只是系统上文件的表示,即文件名,路径等。 您甚至看过该课程的Javadoc 吗?在这里看看, 如果检查它具有的字段或方法或构造函数参数,您会立即得到暗示,它只是

  • 问题内容: 我有一个接收a的函数,但是我所拥有的a是进行此转换的最佳方法是什么? 我想我可以走很长一段路,然后将其放入字符串并放入字节中,但这听起来很难看,而且我认为还有更好的方法可以做到。 问题答案: 我同意Brainstorm的方法:假设您要传递机器友好的二进制表示形式,请使用该库。OP建议可能会有一些开销。纵观源的实施,我看到它做了一些运行时的决策最大的灵活性。 对?Write()接受一个非