记录一个小bug

在一次Java网络编程练习中,客户端(KHD.class)尝试从服务器(FWQ.class)下载文件,但服务器遇到了NullPointerException。问题源于服务器尝试从类路径加载文件时,文件可能不存在,导致空指针异常。解决方法是确保文件路径正确,并在访问前检查资源是否为null。
摘要由CSDN通过智能技术生成

在网络编程的小综合练习中,发现服务器出现了空指针异常(NullPointerException)

其实代码没问题,是之前将改文件夹设置成了"测试资源根"

 

以下为问题描述

客户端(KHD.class)向服务器(FWQ.class)请求下载一个文件

以下是服务器代码

package com.itheima.inherit.day13;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class FWQ {
    public static void main(String[] args) throws IOException {
        ServerSocket ss = new ServerSocket(15131);//服务器开门营业

        //这是读取文件名
        Socket socket = ss.accept();//创建服务器接收数据的通道
        BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));//文件名
        String name = br.readLine();//读数据
        System.out.println("服务器收到一个一个下载" +name+"文件的请求");



        //用本地文件字节流导入文件数据
        InputStream fis = FWQ.class.getClassLoader().getResourceAsStream(name);
        //获得网络输出流
        OutputStream out = socket.getOutputStream();

        //数组来装读到的内容
        byte[] bytes = new byte[8192];
        int len;


        while ((len=fis.read(bytes))!=-1) {
            //一直往数组里面读
        out.write(bytes,0,len);//不断用网络输出流来传递
        }

        socket.shutdownOutput();
        //结束循环就代表传递成功了
        System.out.println("传递成功了!");


        //打扫卫生
        ss.close();
        socket.close();
        fis.close();
        //关服务器/关通道/关输入流

    }
}

 以下是客户端代码

package com.itheima.inherit.day13;

import java.io.*;
import java.net.Socket;
import java.util.Scanner;
import java.util.UUID;


public class KHD {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("127.0.0.1", 15131);//客户端立个牌子
        Scanner sc = new Scanner(System.in);//导入键盘录入功能

        System.out.println("请输入需要的文件名称");
        String name = sc.next();

        //获得网络输出流,字节->转换流->字符流
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

        bw.write(name);//路径:ServerDir/moom.jpg
        bw.newLine();
        bw.flush();



        //用网络字节输入流接受数据
        FileOutputStream fops = new FileOutputStream("ClientDir/"+UUID.randomUUID().toString().replace("-","") +"jpg");
        InputStream is = socket.getInputStream();
        byte[] bytes = new byte[8192];
        int len;
        while ((len = is.read(bytes)) != -1) {
            fops.write(bytes, 0, len);
            }
            //写入到本地文件中

        //完事,打扫屋子
        socket.close();
        fops.close();
        System.out.println("客户端文件下载完毕...");//现在这个客户端就跟标准答案一模一样了...
        }

    }

结果就收到了以下报错

FWQ:

 

 KHD:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值