我试图让用户从图库中选择一个图像,在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();
}
答案 0 :(得分:2)
知道我做错了什么?
您认为Uri
始终指向文件。
如果 Uri
的方案为file
,则则 getPath()
将成为文件系统路径。根据您获得Uri
的方式,该文件系统路径可能是可用的。
大多数情况下,Uri
会有不同的方案,通常为content
。对于这样的Uri
,getPath()
毫无意义,正如getPath()
对于Uri
https://stackoverflow.com/questions/46457384/error-when-converting-file-to-byte-array-java-iofilenotfoundexception
Uri
毫无意义一样。
对于方案为content
(或file
或android.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()
崩溃,因为你不会有一个连续的空闲堆空间块来加载用户选择的整个内容。