자바 원 격 서버 파일 을 로 컬 로 다운로드(http 프로 토 콜 과 ssh 2 프로 토 콜 기반)
1.특정한 시스템 과 연결 하여 매일 최신 그림 을 가 져 와 전단 페이지 에 표시 합 니 다.이 시스템 은 http 프로 토 콜 의 그림 URL 을 제공 합 니 다.원래 이 시스템 의 그림 주 소 를 가 져 온 후에 HTML 에 표시 하면 됩 니 다.그러나 이 시스템 이 불안정 하고 그림 URL 을 자주 사용 할 수 없 으 며 매일 그림 을 만 드 는 데 성공 하지 못 합 니 다.
자기 시스템 의 기능 에 대한 영향 이 매우 크다.그래서 매일 이 시스템 에서 최신 그림 을 다운로드 하여 로 컬 업데이트 로 저장 하고 새 그림 이 없 으 면 지난번 그림 을 계속 사용 하 는 것 을 고려 합 니 다.
2.회사 알고리즘 팀 의 동료 가 영상 분석의 검 측 기능 을 완 성 했 고 캡 처 한 짧 은 영상 파일 을 생 성 할 수 있 으 며 시스템 은 이 영상 파일 을 가 져 오고 저장 해 야 합 니 다.알고리즘 은 Linux 시스템 에서 실행 되 고 FTP 서버 가 구축 되 지 않 았 기 때문에 알고리즘 을 실행 하 는 Linux 시스템 에서 파일 을 시스템 로 컬 로 복사 하여 저장 해 야 합 니 다.
이 두 가지 수 요 는 모두 대동소이 하 다.사고방식 은 파일 을 읽 고 지정 한 경 로 를 쓰 는 것 이다.http 프로 토 콜 의 그림 주 소 는 직접 읽 고 저장 할 수 있 을 뿐 리 눅 스 시스템 의 파일 은 이 서버 에 원 격 으로 연결 한 다음 에 파일 을 다운로드 해 야 한다.그러면 다음 과 같은 의존 도 를 도입 해 야 한다.
<!-- -->
<dependency>
<groupId>ch.ethz.ganymed</groupId>
<artifactId>ganymed-ssh2</artifactId>
<version>262</version>
</dependency>
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.53</version>
</dependency>
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.4</version>
</dependency>
쓸데없는 말 말고 코드 부터 올 려.
package com.XXX.utils;
import ch.ethz.ssh2.*;
import com.databus.Log;
import com.mysql.jdbc.StringUtils;
import java.io.*;
import java.net.*;
public class FileUtils {
public static boolean downloadFile(String urlString,String fileName,String filePath) {
boolean bool = false;
InputStream is = null;
FileOutputStream os = null;
try {
Log.info(" :" + urlString);
// URL
java.net.URL url = new java.net.URL(urlString);
//
URLConnection con = url.openConnection();
//
is = con.getInputStream();
// 1K
byte[] bs = new byte[1024];
//
int len;
// ,
File file = new File(filePath);
if (!file.exists())
file.mkdirs();
//fileName , , :fileName + ".jpg";fileName + ".txt";
os = new FileOutputStream(filePath + fileName, false);//false: ,true:
//
while ((len = is.read(bs)) != -1) {
os.write(bs, 0, len);
}
bool = true;
Log.info(" :" + fileName);
}catch (Exception e){
e.printStackTrace();
}finally {
// ,
if (null != os){
try {
os.flush();
os.close();
}catch (IOException e){
e.printStackTrace();
}
}
if (null != is){
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return bool;
}
//
public static boolean copyFile(String ip,int port,String userName,String password,String sourceFile,String targetFile,String targetFileName){
boolean bool = false;
Connection conn = null;
Session session = null;
try {
if (StringUtils.isNullOrEmpty(ip) || StringUtils.isNullOrEmpty(userName) || StringUtils.isNullOrEmpty(password) ||
StringUtils.isNullOrEmpty(sourceFile) || StringUtils.isNullOrEmpty(targetFile)){
return bool;
}
conn = new Connection(ip,port);
conn.connect();
boolean isAuth = conn.authenticateWithPassword(userName,password);
if (!isAuth){
Log.info(" ");
return bool;
}
//
session = conn.openSession();
//
session.execCommand("df -h");
InputStream staout = new StreamGobbler(session.getStdout());
BufferedReader br = new BufferedReader(new InputStreamReader(staout));
String line = null;
while ((line = br.readLine()) != null){
System.out.println(line);
}
br.close();
//
SCPClient scpClient = conn.createSCPClient();
SCPInputStream scpis = scpClient.get(sourceFile);
// ,
File file = new File(targetFile);
if (!file.exists())
file.mkdirs();
FileOutputStream fos = new FileOutputStream(targetFile + targetFileName);
byte[] buffer = new byte[1024];
int len = 0;
while ((len = scpis.read(buffer)) != -1){
fos.write(buffer,0,len);
}
fos.close();
bool = true;
//SFTP
/*SFTPv3Client sftPClient = new SFTPv3Client(conn);
sftPClient.createFile("");
sftPClient.close();*/
}catch (Exception e){
e.printStackTrace();
Log.info(e.getMessage());
Log.info(" :" + sourceFile);
}finally {
if (null != session){
session.close();
}
if (null != conn) {
conn.close();
}
}
return bool;
}
}
첫 번 째 방법 downloadFile(String url String,String fileName,String filePath)은 우리 가 파일 을 읽 고 쓰 는 것 과 다 를 바 가 없습니다.리 눅 스 서버 파일 을 원 격 으로 읽 는 방법 을 알려 드 리 겠 습 니 다.copyFile(String ip,int port,String userName,String password,String sourceFile,String targetFile,String targetFileName)
리 눅 스 서버 의 ip,ssh 가 열 린 포트 번호(일반적으로 기본 값 은 22),서버 사용자 이름과 비밀번호 가 필요 합 니 다.따라서 리 눅 스 서버 가 ssh 연결 을 열 었 는 지 확인 해 야 합 니 다.그렇지 않 으 면 우리 프로그램 은 서버 와 연결 되 지 않 고 파일 복 제 는 말 할 것 도 없습니다.
사실 ssh 2 원 격 서버 를 연결 하 는 것 은 우리 가 Xshell 로 서버 를 연결 하 는 것 과 같 습 니 다.파일 을 복사 할 수 있 을 뿐만 아니 라 Linux 명령 을 실행 하여 Linux 를 조작 할 수도 있 습 니 다.위의 코드 를 보 세 요.
//
session = conn.openSession();
//
session.execCommand("df -h");
InputStream staout = new StreamGobbler(session.getStdout());
BufferedReader br = new BufferedReader(new InputStreamReader(staout));
String line = null;
while ((line = br.readLine()) != null){
System.out.println(line);
}
br.close();
이 코드 는 복사 파일 과 관계 가 없습니다.유지 하 는 이 유 는 df-h 명령(서버 디스크 사용 상황 조회)을 실 행 했 기 때문에 디스크 의 구체 적 인 사용 상황 을 얻 을 수 있 습 니 다.아래 그림 과 같은 효과 가 있 습 니 다.그래서 우 리 는 ssh 2 로 많은 일 을 할 수 있 고 관심 있 는 동 화 를 많이 알 수 있 습 니 다.또한 copy File()방법의 마지막 주석 코드 가 있 습 니 다.
//SFTP
/*SFTPv3Client sftPClient = new SFTPv3Client(conn);
sftPClient.createFile("files");
sftPClient.close();*/
또한 SFTP 연결 을 통 해 디 렉 터 리 와 파일 을 원 격 으로 조작 할 수 있 습 니 다.예 를 들 어 디 렉 터 리 생 성,삭제,파일 생 성,삭제 등 입 니 다.ssh 2 가방 의 다른 기능 과 용법 에 대해 더 이상 설명 하지 않 습 니 다.관심 있 는 동 화 는 댓 글 에서 교 류 를 환영 합 니 다.
이상 은 자바 가 원 격 서버 파일 을 로 컬(http 프로 토 콜 과 ssh 2 프로 토 콜 기반)에 다운로드 하 는 상세 한 내용 입 니 다.자바 다운로드 서버 파일 에 대한 자 료 는 다른 관련 글 을 주목 하 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.