OCTDN
2021-03-28 18:22
采纳率: 87.5%
浏览 53
已结题

为什么这个文本文件上传到服务器再保存到本地之后里面没有内容啊,是个空文本文件

发送端:

import java.io.*;

import java.net.*;

 

public class Test {

    public static void main(String[] args) throws IOException {

        InetAddress address = InetAddress.getByName("OCTDN");

        String ip = address.getHostAddress();

        Socket sk = new Socket(ip,10000);

 

        

        FileInputStream fis = new FileInputStream("Test.txt");

        BufferedInputStream bis = new BufferedInputStream(fis);

        OutputStream os = sk.getOutputStream();

        BufferedOutputStream bos = new BufferedOutputStream(os);

        int b;

        while ((b = bis.read()) != -1) {

            bos.write(b);

        }

        sk.shutdownOutput();

 

        InputStream is = sk.getInputStream();

        BufferedReader bis1 = new BufferedReader(new InputStreamReader(is));

        String a;

        while ((a = bis1.readLine()) != null) {

            System.out.println(a);

        }

        bis.close();

        sk.close();

    }

}

服务器:

import java.io.*;

import java.net.*;

 

public class Test01 {

    public static void main(String[] args) throws IOException {

        ServerSocket svk = new ServerSocket(10000);

        Socket sk = svk.accept();

        InputStream is = sk.getInputStream();

        BufferedInputStream bis = new BufferedInputStream(is);

        FileOutputStream fos = new FileOutputStream("Test01.txt"); 

        BufferedOutputStream bos = new BufferedOutputStream(fos);

        int a;

        byte b[] = new byte[1024];

        while ((a = bis.read(b)) != -1) {

            bos.write(b,0,b.length);

        }

        OutputStream ous = sk.getOutputStream();

        BufferedWriter brw = new BufferedWriter(new OutputStreamWriter(ous));

        String c = "上传成功";

        brw.write(c);

        brw.newLine();

        brw.flush();

 

        bos.close();

        bis.close();

        svk.close();

    }

}

  • 收藏

1条回答 默认 最新

  • 三岁丫 2021-03-28 19:50
    已采纳

    服务端有点点小的问题。

    int a;
    byte b[] = new byte[1024];
    while ((a = bis.read(b)) != -1) {
        // 这里改成了 a,而不是 b.length,因为 b 里面只有 b[0-a] 是有数据的,其他的是没有数据,或无效数据
        bos.write(b,0, a);
    }

    客户端也要稍微改一下

    while ((b = bis.read()) != -1) {
        bos.write(b);
    }
    // 写完之后记得刷新一下
    bos.flush();
    已采纳该答案
    打赏 评论

相关推荐 更多相似问题