android程序怎么将一个文本文件从android手机写入pc机和pc机写入android手机。
主要是解决android手机设备与pc机通信问题,比如我android程序记录了些数据,通过程序写入文本,怎么把这个文本通过wifi上传到pc机,然后pc机将处理结果返回给android手机。还没有更好的方案,或者实现方法。贴出点参考资料,代码。
主要是解决android手机设备与pc机通信问题,比如我android程序记录了些数据,通过程序写入文本,怎么把这个文本通过wifi上传到pc机,然后pc机将处理结果返回给android手机。还没有更好的方案,或者实现方法。贴出点参考资料,代码。
用Java Serialization实现任意文件网络传输其中有两个实验:
实验一:服务器和客户端都是在PC上的
实验二:服务器是PC上的,客户端是Android手机上的两个实验的代码,本人都验证通过了的。
请留意:
1. 手机是通过WIFI和服务器连接的
2. 整个架构采用C/S,而不是B/S
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:604)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1575)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
at com.pnf.transfer.ObjectServer.main(ObjectServer.java:27)
这是在模拟器上出现的错误,
如果是在真机上的话,就没什么反映,应该是没有连接到服务器
import java.io.FileInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class AndroidObjectClient extends Activity
implements
OnClickListener
{
private Button btn_send;
private String filePath = "/sdcard/";
private String fileName = "test1.txt";
// private String filePath = "/sdcard/image/";
// private String fileName = "bln.jpg"; @Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn_send = (Button)this.findViewById(R.id.btn_send);
btn_send.setOnClickListener(this);
}
public void onClick(View v)
{
try
{ // 建立和服务器的连接
Socket socket = new Socket("192.168.1.105", 16666);
// 创建FilePojo对象
FilePojo fpo = new FilePojo();
// 设定文件名
fpo.setFileName(fileName); // 设定文件大小
File f = new File(filePath + fileName);
long fileLength = f.length();
fpo.setFileLength(fileLength);
// 读取文件内容,并将其转换为byte[]
FileInputStream fis = new FileInputStream(filePath + fileName);
byte[] fileContent = new byte[(int) fileLength];
fis.read(fileContent, 0, (int) fileLength);
fpo.setFileContent(fileContent);
// 将FilePojo对象fpo写到Socket client指定的输出流
long start = System.currentTimeMillis();
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
oos.writeObject(fpo);
long end = System.currentTimeMillis();
Toast.makeText(this.getApplicationContext(), "It takes " + (end - start) + "ms", Toast.LENGTH_LONG).show();
oos.flush();
oos.close();
}
catch(Exception ioe)
{
ioe.printStackTrace();
}
}
}这是我按照你的改动了点,我的FilePojo这个类,与这个AndroidObjectClient类在同一个包类,怎么提示找不到咧,
服务器和客户端两个项目中,都要有同样一个FilePojo类。你把Server端的FilePojo.java拷贝到Client项目中试试。我在模拟器和真机上都试过,没有问题。
我在模拟器上测试了,能够将文件下在到pc机上,但是没有内容,
真机上还是不能够测试通过,在真机上界面会卡住一会,就没反映或者退出,请教下这是什么问题,是不是wifi没设置好还是别的什么?
2. 手机当然先要连上WIFI了,否则没有办法进行TCP/IP连接。如果卡住的比较长(比如文件大小10k的话,应该基本上不会出现明显的卡)一般情况下,应该是没有WIFI连接。要建立WIFI连接,请到手机上的“设置”里面去打开WIFI,手机会自动为你搜索是否有无限网络,找到后,你提供无限局域网的用户名和密码就OK了。
fpo.setFileName("test1.txt");
// File f = new File("/mnt/sdcard/test1.txt");
File f = new File("/sdcard/test1.txt"); // 如果test1.txt在sdcard的根目录下,你这样写试试 // 设定文件大小
long fileLength = f.length();
// 在这里增加一个Logcat输出,看看文件大小是否正常:
Log.e("#1", " " + fileLength); fpo.setFileLength(fileLength);
// Toast.makeText(this.getApplicationContext(), "Set file size", Toast.LENGTH_LONG).show();
//// 读取文件内容,并将其转换为byte[]
FileInputStream fis = new FileInputStream("/sdcard/test1.txt");