android程序怎么将一个文本文件从android手机写入pc机和pc机写入android手机。
主要是解决android手机设备与pc机通信问题,比如我android程序记录了些数据,通过程序写入文本,怎么把这个文本通过wifi上传到pc机,然后pc机将处理结果返回给android手机。还没有更好的方案,或者实现方法。贴出点参考资料,代码。

解决方案 »

  1.   

    请参考拙作:
    用Java Serialization实现任意文件网络传输其中有两个实验:
    实验一:服务器和客户端都是在PC上的
    实验二:服务器是PC上的,客户端是Android手机上的两个实验的代码,本人都验证通过了的。
    请留意:
    1. 手机是通过WIFI和服务器连接的
    2. 整个架构采用C/S,而不是B/S
      

  2.   

    Exception in thread "main" java.lang.ClassNotFoundException: com.AndroidObjectClient.FilePojo
    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)
    这是在模拟器上出现的错误,
    如果是在真机上的话,就没什么反映,应该是没有连接到服务器
      

  3.   

    package com.AndroidObjectClient;import java.io.File;
    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类在同一个包类,怎么提示找不到咧,
      

  4.   


    服务器和客户端两个项目中,都要有同样一个FilePojo类。你把Server端的FilePojo.java拷贝到Client项目中试试。我在模拟器和真机上都试过,没有问题。
      

  5.   

    这个文件FilePojo.java我是直接从服务器中拷贝过来的啊,而且放在AndroidObjectClient类在同一个包下
      

  6.   

    已经发给你了,请查收。你把两个项目加入到Eclipse中试试。我用的是Android SDK2.2。
      

  7.   

    已经接到,但是还有点问题,已经发送到你的邮箱,麻烦查收下,并我帮我解决下这个问题!不甚感激!
    我在模拟器上测试了,能够将文件下在到pc机上,但是没有内容,
    真机上还是不能够测试通过,在真机上界面会卡住一会,就没反映或者退出,请教下这是什么问题,是不是wifi没设置好还是别的什么?
      

  8.   

    1. 你得确认你要传输的文件是在代码中指定的目录中是存在的。这个在不同的机器上目录会稍有不同。你得试试才行。比如在我平板电脑是“/mnt/sdcard/image/bln.jpg”,而在索爱的手机上是“/sdcard/image/bln.jpg”。你可以将手机连到电脑上,用文件浏览器查看一下。
    2. 手机当然先要连上WIFI了,否则没有办法进行TCP/IP连接。如果卡住的比较长(比如文件大小10k的话,应该基本上不会出现明显的卡)一般情况下,应该是没有WIFI连接。要建立WIFI连接,请到手机上的“设置”里面去打开WIFI,手机会自动为你搜索是否有无限网络,找到后,你提供无限局域网的用户名和密码就OK了。
      

  9.   


       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");
      

  10.   

    手机wifi启动了啊,因为可以上网,而且在电脑上还可以ping通,现在的问题是模拟器上可以将文件上传到pc机而且内容也有了,但手机上还是没有实现