我用的socket来写的
传文本文件能打开且大小都没改变
word文档则出现乱码,而且一页传过去的乱码能有30多页
传图片文件大小没变,打开没有图片
传视频文件,大小变了,每次都少的大小都一样,打开播放器报错
下面是部分代码
客户端
path为上传文件的名字,运行此代码时经得到点击的文件 Socket clientSocket = new Socket(InetAddress.getByName("192.168.18.4"),7999);
System.out.println(path);
OutputStream os = clientSocket.getOutputStream();
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
File file = new File(path);
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
char [] buffer = new char[1024];
while(br.read(buffer) > 0){
bw.write(String.copyValueOf(buffer).trim());
System.out.println(String.copyValueOf(buffer).trim());
buffer = new char[1024];
bw.flush();
}
System.out.println(br.read(buffer));
System.out.println(String.copyValueOf(buffer));
br.close();
fr.close();
bw.close();
os.close();
clientSocket.close();
服务器端
接受到客户端socket直接跳到这个线程,file为我存文件的位置和名称,由于文件不能重复,所以用上传日期为文件名import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;
import java.util.Date;
public class SocketRecvThread extends Thread { Socket socket;
public SocketRecvThread(Socket s){
this.socket = s;
}
public void run() {
InputStream is;
File file = new File("E:\\apache-tomcat-5.5.27\\webapps\\my_graduation\\upload\\video\\"
+ Long.toString(new Date().getTime()) + ".doc");
FileWriter fw = null;
BufferedWriter bw = null;
try {
fw = new FileWriter(file);
bw = new BufferedWriter(fw);
}catch (IOException e) {
e.printStackTrace();
}
try {
is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
char []charbuffer = new char[1024];
while(br.read(charbuffer) > 0){
bw.write(String.copyValueOf(charbuffer).trim());
charbuffer = new char[1024];
bw.flush();
}
bw.close();
fw.close();
br.close();
is.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}请大家帮忙看看 谢谢 指点指点
传文本文件能打开且大小都没改变
word文档则出现乱码,而且一页传过去的乱码能有30多页
传图片文件大小没变,打开没有图片
传视频文件,大小变了,每次都少的大小都一样,打开播放器报错
下面是部分代码
客户端
path为上传文件的名字,运行此代码时经得到点击的文件 Socket clientSocket = new Socket(InetAddress.getByName("192.168.18.4"),7999);
System.out.println(path);
OutputStream os = clientSocket.getOutputStream();
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
File file = new File(path);
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
char [] buffer = new char[1024];
while(br.read(buffer) > 0){
bw.write(String.copyValueOf(buffer).trim());
System.out.println(String.copyValueOf(buffer).trim());
buffer = new char[1024];
bw.flush();
}
System.out.println(br.read(buffer));
System.out.println(String.copyValueOf(buffer));
br.close();
fr.close();
bw.close();
os.close();
clientSocket.close();
服务器端
接受到客户端socket直接跳到这个线程,file为我存文件的位置和名称,由于文件不能重复,所以用上传日期为文件名import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;
import java.util.Date;
public class SocketRecvThread extends Thread { Socket socket;
public SocketRecvThread(Socket s){
this.socket = s;
}
public void run() {
InputStream is;
File file = new File("E:\\apache-tomcat-5.5.27\\webapps\\my_graduation\\upload\\video\\"
+ Long.toString(new Date().getTime()) + ".doc");
FileWriter fw = null;
BufferedWriter bw = null;
try {
fw = new FileWriter(file);
bw = new BufferedWriter(fw);
}catch (IOException e) {
e.printStackTrace();
}
try {
is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
char []charbuffer = new char[1024];
while(br.read(charbuffer) > 0){
bw.write(String.copyValueOf(charbuffer).trim());
charbuffer = new char[1024];
bw.flush();
}
bw.close();
fw.close();
br.close();
is.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}请大家帮忙看看 谢谢 指点指点
具体为什么就只能去研究编码方式了。因为writer把所有的东西都当成字符序列来写,java中就是所谓的unicode序列。