我正在尝试使用InputStream,OutputStream,FileInputStream和FileOutputStream从我的电脑复制SD卡图像文件。但错误来自FileOutputStream,因为我们传递给它的值是桌面文件夹。代码是
File file = new File(path); \\ where 'path' is the sd card image file path
File destFolder = new File("D:\\images\\"); \\ I know this path is not correct. IP address of PC is missing here
InputStream in = new FileInputStream(file);
OutputStream out = new FileOutputStream(destFolder);
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
in.close();
out.close();
当我们可以将文件从一个系统复制到同一个网络上的另一个系统时,为什么我们不能在移动设备到电脑的同时通过wifi连接到同一个网络。
如果无法使用上述方法,那么执行此操作的方法是什么。
错误是:
05-25 20:06:20.836 2576-2576/com.example.user.storeimage E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.user.storeimage, PID: 2576
java.lang.IllegalStateException: Could not execute method for android:onClick
at android.view.View$DeclaredOnClickListener.onClick(View.java:4452)
at android.view.View.performClick(View.java:5198)
at android.view.View$PerformClick.run(View.java:21147)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at android.view.View$DeclaredOnClickListener.onClick(View.java:4447)
at android.view.View.performClick(View.java:5198)
at android.view.View$PerformClick.run(View.java:21147)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.io.FileNotFoundException: D:\images\: open failed: EROFS (Read-only file system)
at libcore.io.IoBridge.open(IoBridge.java:452)
at java.io.FileOutputStream.<init>(FileOutputStream.java:87)
at java.io.FileOutputStream.<init>(FileOutputStream.java:72)
at com.example.user.storeimage.copyimagetopc.onClickSaveBtn(copyimagetopc.java:52)
at java.lang.reflect.Method.invoke(Native Method)
at android.view.View$DeclaredOnClickListener.onClick(View.java:4447)
at android.view.View.performClick(View.java:5198)
at android.view.View$PerformClick.run(View.java:21147)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: android.system.ErrnoException: open failed: EROFS (Read-only file system)
at libcore.io.Posix.open(Native Method)
at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
at libcore.io.IoBridge.open(IoBridge.java:438)
at java.io.FileOutputStream.<init>(FileOutputStream.java:87)
at java.io.FileOutputStream.<init>(FileOutputStream.java:72)
at com.example.user.storeimage. copyimagetopc.onClickSaveBtn(copyimagetopc.java:52)
at java.lang.reflect.Method.invoke(Native Method)
at android.view.View$DeclaredOnClickListener.onClick(View.java:4447)
at android.view.View.performClick(View.java:5198)
at android.view.View$PerformClick.run(View.java:21147)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
答案 0 :(得分:1)
File
适用于文件系统路径,适用于本地文件系统。在Android的情况下,本地文件系统是Android设备。 Android设备上没有D:\\images\\
。 Android不支持将SMB服务器映射到文件系统路径。
如果无法使用上述方法,那么执行此操作的方法是什么。
直接使用SMB(例如,jCIFS)或找到一些通过某种API(例如ContentProvider
)公开SMB服务器的应用程序。
答案 1 :(得分:0)
由于以下错误和CommonsWare的回答,我认为您需要知道您的手机和计算机操作系统位于不同的主机中。所以D:\\images\\
指向相同的主机地址。您需要指向您的LAN地址并使用samba或相同的Windows共享器之类的协议来共享文件夹并提供权限,或者您可以使用像XAMPP
这样的Web服务器并将该文件作为编码基础发送64字符串和解码然后在xampp服务器上使用php并将其保存到文件夹中。