「发送文件java」发送文件到邮箱怎么发
今天给各位分享发送文件java的知识,其中也会对发送文件到邮箱怎么发进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、java文件发给别人,别人需要部署吗
- 2、java socket传送文件
- 3、用Java实现在两台电脑之间的文件传输
- 4、java中如何实现从客户端发送文件到服务器端
- 5、http如何实现同时发送文件和报文(用java实现)
- 6、java中如何实现从客户端发送文件到服务器端?
java文件发给别人,别人需要部署吗
需要部署的
1.搭建一台FTP服务器,然后通过FTP协议进行文件传输。这个方式固然有效,但是有点麻烦。
2.通过Socket来传输文件,这种方法需要编写一个客户端和一个服务端,这种方案比较通用,在其他方案不可行的情况下,这种方案还是不错的。
3.搭建一台HTTP服务器(例如tomcat),上传文件时直接将文件上传到这台机器上,需要部署用来上传文件的应用。
4.如果是windows系统可以采取最简单的形式来完成文件传输(文件共享)。
java socket传送文件
客户端代码如下:
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Socket;
/**
* 文件发送客户端主程序
* @author admin_Hzw
*
*/
public class BxClient {
/**
* 程序main方法
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
int length = 0;
double sumL = 0 ;
byte[] sendBytes = null;
Socket socket = null;
DataOutputStream dos = null;
FileInputStream fis = null;
boolean bool = false;
try {
File file = new File("D:/天啊.zip"); //要传输的文件路径
long l = file.length();
socket = new Socket();
socket.connect(new InetSocketAddress("127.0.0.1", 48123));
dos = new DataOutputStream(socket.getOutputStream());
fis = new FileInputStream(file);
sendBytes = new byte[1024];
while ((length = fis.read(sendBytes, 0, sendBytes.length)) 0) {
sumL += length;
System.out.println("已传输:"+((sumL/l)*100)+"%");
dos.write(sendBytes, 0, length);
dos.flush();
}
//虽然数据类型不同,但JAVA会自动转换成相同数据类型后在做比较
if(sumL==l){
bool = true;
}
}catch (Exception e) {
System.out.println("客户端文件传输异常");
bool = false;
e.printStackTrace();
} finally{
if (dos != null)
dos.close();
if (fis != null)
fis.close();
if (socket != null)
socket.close();
}
System.out.println(bool?"成功":"失败");
}
}
服务端代码如下:
import java.io.DataInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;
import com.boxun.util.GetDate;
/**
* 接收文件服务
* @author admin_Hzw
*
*/
public class BxServerSocket {
/**
* 工程main方法
* @param args
*/
public static void main(String[] args) {
try {
final ServerSocket server = new ServerSocket(48123);
Thread th = new Thread(new Runnable() {
public void run() {
while (true) {
try {
System.out.println("开始监听...");
/*
* 如果没有访问它会自动等待
*/
Socket socket = server.accept();
System.out.println("有链接");
receiveFile(socket);
} catch (Exception e) {
System.out.println("服务器异常");
e.printStackTrace();
}
}
}
});
th.run(); //启动线程运行
} catch (Exception e) {
e.printStackTrace();
}
}
public void run() {
}
/**
* 接收文件方法
* @param socket
* @throws IOException
*/
public static void receiveFile(Socket socket) throws IOException {
byte[] inputByte = null;
int length = 0;
DataInputStream dis = null;
FileOutputStream fos = null;
String filePath = "D:/temp/"+GetDate.getDate()+"SJ"+new Random().nextInt(10000)+".zip";
try {
try {
dis = new DataInputStream(socket.getInputStream());
File f = new File("D:/temp");
if(!f.exists()){
f.mkdir();
}
/*
* 文件存储位置
*/
fos = new FileOutputStream(new File(filePath));
inputByte = new byte[1024];
System.out.println("开始接收数据...");
while ((length = dis.read(inputByte, 0, inputByte.length)) 0) {
fos.write(inputByte, 0, length);
fos.flush();
}
System.out.println("完成接收:"+filePath);
} finally {
if (fos != null)
fos.close();
if (dis != null)
dis.close();
if (socket != null)
socket.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
用Java实现在两台电脑之间的文件传输
使用Socket可以做到,不过直接编程一般都是在局域网内,如果要在不同局域网间通信,需要使用一台有公网IP的服务器,可以电脑A和电脑B同时连接服务器,然后A向服务器传递文件,服务器再将文件转发电脑B。也可以使用打洞的方式使A、B互联,此时服务器的作用是辅助打洞。A、B向服务器发送信息后socket不要关闭(假设使用10989端口),同时使用Serversocket绑定监听相同的端口(监听10989端口)。在java中有参数可以做到,具体方法请自行百度。服务器获取到A、B的外网地址和端口,将A的外网地址信息发送给B、将B的外网地址信息发送给A。然后使用A没有关闭的Socket向B发送一组信息(此时连接会失败,但是B的路由表上已经记录了A的信息),发送后A向服务器发送消息,服务器告诉B A已经发送消息。然后B使用未关闭的socket向A发送消息,就和A上监听的ServerSocket取得连接了。之后就可以互相传递数据。
java中如何实现从客户端发送文件到服务器端
BufferedInputStream bis = new BufferedInputStream( new FileInputStream("文件路径"));
byte[] buf = new byte[1024];
int len = 0;
BufferedOutputStream bos = new BufferedOutputStream(s.getOutputStream);
while((len = bis.read(buf))!=-1){
bos.write(buf,0,len);
bos.flush();
}
思路是这样的了。。。具体你自己写吧。
http如何实现同时发送文件和报文(用java实现)
你用的servlet 还是别的框架?
选POST
选form-data
选body
选File
选文件
Send
// commons fileupload组件的情况下,servlet接收的数据只能是type=file表单元素类型,那么获取type=text类型,就可以使用parseRequest(request)来获取list,fileitem,判断isFormField,为true非file类型的。就可以处理了。下面是处理的部分代码:
DiskFileItemFactory factory = new DiskFileItemFactory();factory.setSizeThreshold(1024*1024);
String dirtemp = "c:";
File filedir = new File(dirtemp + "filetemp");
String str = null;if(!filedir.exists())filedir.mkdir();factory.setRepository(filedir);
ServletFileUpload upload = new ServletFileUpload(factory);
List list = upload.parseRequest(request);for(
int i = 0;ilist.size();i++)
{
FileItem item = (FileItem) list.get(i);
if (item.isFormField()) {
System.out.println(item.getString());
} else {
String filename = item.getName();
item.write(new File(request.getRealPath(dir), filename));
}
}
java中如何实现从客户端发送文件到服务器端?
服务器端源码:\x0d\x0aimport java.io.BufferedReader;\x0d\x0aimport java.io.File;\x0d\x0aimport java.io.FileNotFoundException;\x0d\x0aimport java.io.FileOutputStream;\x0d\x0aimport java.io.IOException;\x0d\x0aimport java.io.InputStream;\x0d\x0aimport java.io.InputStreamReader;\x0d\x0aimport java.net.ServerSocket;\x0d\x0aimport java.net.Socket;\x0d\x0a\x0d\x0a/**\x0d\x0a *\x0d\x0a * 文件名:ServerReceive.java\x0d\x0a * 实现功能:作为服务器接收客户端发送的文件\x0d\x0a *\x0d\x0a * 具体实现过程:\x0d\x0a * 1、建立SocketServer,等待客户端的连接\x0d\x0a * 2、当有客户端连接的时候,按照双方的约定,这时要读取一行数据\x0d\x0a * 其中保存客户端要发送的文件名和文件大小信息\x0d\x0a * 3、根据文件名在本地创建文件,并建立好流通信\x0d\x0a * 4、循环接收数据包,将数据包写入文件\x0d\x0a * 5、当接收数据的长度等于提前文件发过来的文件长度,即表示文件接收完毕,关闭文件\x0d\x0a * 6、文件接收工作结束\x0d\x0a\x0d\x0apublic class ServerReceive {\x0d\x0a \x0d\x0a public static void main(String[] args) {\x0d\x0a \x0d\x0a /**与服务器建立连接的通信句柄*/\x0d\x0a ServerSocket ss = null;\x0d\x0a Socket s = null;\x0d\x0a \x0d\x0a /**定义用于在接收后在本地创建的文件对象和文件输出流对象*/\x0d\x0a File file = null;\x0d\x0a FileOutputStream fos = null;\x0d\x0a \x0d\x0a /**定义输入流,使用socket的inputStream对数据包进行输入*/\x0d\x0a InputStream is = null;\x0d\x0a \x0d\x0a /**定义byte数组来作为数据包的存储数据包*/\x0d\x0a byte[] buffer = new byte[4096 * 5];\x0d\x0a \x0d\x0a /**用来接收文件发送请求的字符串*/\x0d\x0a String comm = null;\x0d\x0a\x0d\x0a/**建立socekt通信,等待服务器进行连接*/\x0d\x0a try {\x0d\x0a ss = new ServerSocket(4004);\x0d\x0a s = ss.accept();\x0d\x0a } catch (IOException e) {\x0d\x0a e.printStackTrace();\x0d\x0a }\x0d\x0a\x0d\x0a/**读取一行客户端发送过来的约定信息*/\x0d\x0a try {\x0d\x0a InputStreamReader isr = new InputStreamReader(s.getInputStream());\x0d\x0a BufferedReader br = new BufferedReader(isr);\x0d\x0a comm = br.readLine();\x0d\x0a } catch (IOException e) {\x0d\x0a System.out.println("服务器与客户端断开连接");\x0d\x0a }\x0d\x0a \x0d\x0a /**开始解析客户端发送过来的请求命令*/\x0d\x0a int index = comm.indexOf("/#");\x0d\x0a \x0d\x0a /**判断协议是否为发送文件的协议*/\x0d\x0a String xieyi = comm.substring(0, index);\x0d\x0a if(!xieyi.equals("111")){\x0d\x0a System.out.println("服务器收到的协议码不正确");\x0d\x0a return;\x0d\x0a }\x0d\x0a \x0d\x0a /**解析出文件的名字和大小*/\x0d\x0a comm = comm.substring(index + 2);\x0d\x0a index = comm.indexOf("/#");\x0d\x0a String filename = comm.substring(0, index).trim();\x0d\x0a String filesize = comm.substring(index + 2).trim();\x0d\x0a\x0d\x0a/**创建空文件,用来进行接收文件*/\x0d\x0a file = new File(filename);\x0d\x0a if(!file.exists()){\x0d\x0a try {\x0d\x0a file.createNewFile();\x0d\x0a } catch (IOException e) {\x0d\x0a System.out.println("服务器端创建文件失败");\x0d\x0a }\x0d\x0a }else{\x0d\x0a /**在此也可以询问是否覆盖*/\x0d\x0a System.out.println("本路径已存在相同文件,进行覆盖");\x0d\x0a }\x0d\x0a \x0d\x0a /**【以上就是客户端代码中写到的服务器的准备部分】*/\x0d\x0a\x0d\x0a/**\x0d\x0a * 服务器接收文件的关键代码*/\x0d\x0a try {\x0d\x0a /**将文件包装到文件输出流对象中*/\x0d\x0a fos = new FileOutputStream(file);\x0d\x0a long file_size = Long.parseLong(filesize);\x0d\x0a is = s.getInputStream();\x0d\x0a /**size为每次接收数据包的长度*/\x0d\x0a int size = 0;\x0d\x0a /**count用来记录已接收到文件的长度*/\x0d\x0a long count = 0;\x0d\x0a \x0d\x0a /**使用while循环接收数据包*/\x0d\x0a while(count
回答于 2022-12-11
发送文件java的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于发送文件到邮箱怎么发、发送文件java的信息别忘了在本站进行查找喔。