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

时间:2017-09-27 21:18:47

标签: java android java-io

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

调试后:

'新文件(文件路径)'执行没有问题,具有有效的文件系统路径。

但它总是跳过' ByteArrayOutputStream baos = new ByteArrayOutputStream();'使用 java.ioFileNotFoundException

进行IOException

知道我做错了什么?

还是有一种更有效的方法我可以将文件的一个字节转换为十六进制字符,并将每个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 个答案:

答案 0 :(得分:2)

  

知道我做错了什么?

您认为Uri始终指向文件。

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

大多数情况下,Uri会有不同的方案,通常为content。对于这样的UrigetPath()毫无意义,正如getPath()对于Uri https://stackoverflow.com/questions/46457384/error-when-converting-file-to-byte-array-java-iofilenotfoundexception Uri毫无意义一样。

对于方案为content(或fileandroid.resource)的ContentResolver,请使用openInputStream()InputStream获取关于Uri标识的内容的OutOfMemoryError

即使你修复了这个问题,你也会在大多数情况下使用import math import turtle #Legs a = 70 b = 60 c_pwr = a**2 + b**2 c = math.sqrt(c_pwr) print("Langste zijde is: ", c) #Angles A = math.acos((b**2 + c**2 - a**2) / (2 * b * c)) * 100 B = math.acos((c**2 + a**2 - b**2) / (2 * c * a)) * 100 C = 360 - A - B print(A, " ", B, " ", C) turtle.forward(a) turtle.right(B) turtle.forward(b) turtle.right(A) turtle.forward(c) input() 崩溃,因为你不会有一个连续的空闲堆空间块来加载用户选择的整个内容。