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

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

发送端:

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();
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月19日
  • 已采纳回答 9月11日

悬赏问题

  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解