パチューカ:
私は最近、この使用してJavaでアプリケーションをコピー/ペーストを作成しようとした答えを、私は、ファイルのディレクトリ以外あまり変化しませんでした。私はその中に書かれた「テスト」と通常のテキストファイルを作成しました。私はアプリにコピーファイルを実行しますが、私にsuccess_test.txtでUTF-8エンコーディングに関するエラーを与え、私は確かにこの問題を解決する方法や問題を引き起こしているものじゃないとき。私はのIntelliJ究極の2019.2でのUbuntu 18.04上でこれを実行しています
ここでは、サーバーとクライアントはほとんど同じのようですだ答え
サーバ:
public class Server extends Thread {
public static final int PORT = 3332;
public static final int BUFFER_SIZE = 626;
@Override
public void run() {
try {
ServerSocket serverSocket = new ServerSocket(PORT);
while (true) {
Socket s = serverSocket.accept();
saveFile(s);
}
} catch (Exception e) {
}
}
private void saveFile(Socket socket) throws Exception {
InputStream inputStream = socket.getInputStream();
FileOutputStream fileOutputStream = new FileOutputStream("/home/user/Documents/success_test.txt");;
byte[] byteArray = new byte[1024];
System.out.println("Reading file from server...");
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
int bytesRead;
while ((bytesRead = inputStream.read(byteArray)) != -1) {
bufferedOutputStream.write(byteArray);
}
bufferedOutputStream.close();
System.out.println("Writing file complete...");
}
public static void main(String[] args) {
new Server().start();
}
}
私はオープンsuccess_test.txtにしようとすると、これは私が見たものです
ニック:
あなたは、ファイルへのことを書いて、1024バイト長の配列にデータを読んでいます。これはあなたの出力ファイルがNULL文字である00 \ 1024バイトに水増しされることを意味します。
あなただけ多くのバイトを書くためにそれを使用する必要がありますので、あなたは、あなたのbytesRead変数を持っています:
bufferedOutputStream.write(byteArray, 0, bytesRead);