为了账号安全,请及时绑定邮箱和手机立即绑定

Java - 每行中缺少第一个字母

Java - 每行中缺少第一个字母

开心每一天1111 2023-06-04 17:46:23
我正在创建将文件传输到客户端的文件传输程序。但是当我传输文件时,它丢失了每一行的第一个字母。我的代码有什么问题?我是 java 的新手,所以我不知道下一步该做什么。我试过更改字节大小但没有帮助。我应该怎么办?Server.javaimport java.io.*;import java.net.ServerSocket;import java.net.Socket;import java.util.Scanner;class Server {    public static void main(String[] args) throws IOException {        FileInputStream fis = null;        BufferedInputStream bis = null;        OutputSteam os = null;        ServerSocket serverSocket = null;        Scanner scan = new Scanner(System.in);        String fileSend;        System.out.print("Type the path to the file to send >> ");        fileSend = scan.nextLine();        try {            serverSocket = new ServerSocket(5467);        } catch (Exception e) {            System.out.println("Could not bind to port 5467, Maybe address is already is use or you need to run as administrator");            return;        }        System.out.println("Listening on port 5467");        System.out.println("Waiting for the connection...");        while (true) {            File FileSend = null;            Socket socket = serverSocket.accept();            OutputStream out = socket.getOutputStream();            System.out.println("Accepted connection : " + socket);            InputStream in = socket.getInputStream();            DataInputStream dataIn = new DataInputStream(in);            String login = dataIn.readUTF();            String password = dataIn.readUTF();            String result = "You credential is ";            if (login.equals("1c18b5cdef8f9b4c5d6b2ad087265e597d1d4639337b73a04a335103c00ec64b") && password.equals("1c18b5cdef8f9b4c5d6b2ad087265e597d1d4639337b73a04a335103c00ec64b13d0b73358bfa8978dfaaf180565bcfecd3dc0631cda525920865145fb3fa131")) {                result += "correct";            } else {                result += "incorrect";            }        }    }
查看完整描述

2 回答

?
郎朗坤

TA贡献1921条经验 获得超9个赞

文件是可序列化的,所以我建议您应该尝试直接通过 ObjectOutputStream / ObjectInputStream 发送它。


例如在服务器端:


ObjectInputStream in = new ObjectInputStream(socket.getInputStream());

ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());

...

out.writeObject(yourFileObject);

在客户端:


ObjectInputStream in = new ObjectInputStream(socket.getInputStream());

ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());

...

File receivedFile = null;

try {

    receivedFile = (File) in.readObject();

}

catch (IOException e) {

...

}


查看完整回答
反对 回复 2023-06-04
?
眼眸繁星

TA贡献1873条经验 获得超9个赞

我不完全确定为什么会发生这种情况,但您不应该使用DataInputStreamwhich “让应用程序读取原始 Java 数据类型”,而InputStreamReaderwhich “是从字节流到字符流的桥梁”。

此外,您可以将该阅读器包装成一个BufferedReader让您逐行阅读的内容,您最终会得到类似


try (BufferedReader reader=new BufferedReader(new InputStreamReader(inStream, UTF8));

     PrintWriter writer = new PrintWriter(file)) {

    reader.lines().forEach(writer::println);

}

上传,或


try (PrintWriter writer = new PrintWriter(outStream)) {

    Files.lines().forEach(writer::println);

}

下载。


查看完整回答
反对 回复 2023-06-04
  • 2 回答
  • 0 关注
  • 124 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信