메뉴 건너뛰기

?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

친구들끼리 사용하기위해서 파싱과 ftp를이용해서 여러데이터를 주고받으려한다. 물론 보안면에서 많이 취약 하고 좋지 않지만 그냥 개인적으로 쓰기에는 괜찬은거같다. 그래서 파싱과 여러가지 ftp 를 사용 하여 이용하고있다. 저번에 파싱한것과 ftp이용한것을 토대로 사용한다.

혹시나 나중에다시 쓸일이있을까 포스팅한다. 파일스트림에대해서도 많이 알게되서 기분좋다.

가장 고생한부분은 역시나 스트림부분이었느데 자꾸 데이터가 지워져서 올라가는걸보니,, 루트를 잘못지정해주고,, 스트림을 미리설정해버려서 그런것같다. 그러면

 

첫번째 지정한것은 MainActivity 측에서 실행하는 부분이다. 로직이 너무길어서 FTP와 연관된 부분만 포스팅한다.

//FTPService 는내가설정한 것이다. 여기서 데이터를 받아서 수정한다음 다시 업로딩한다!

//service는 일단 부르기만하면, 서버에서 데이터불러오고 내데이터에 저장하는 것까지 해놨다.

FTPService service=new FTPService("data.xml",latitude,longitude);

//여기서 좀고생했는데 OutputStreamWriter로하고 파일명지정해주니 잘되지않았다.다시스트림공부

//해서 왜잘안되는지 마스터해야지
FileOutputStream fos;

try{

//이부분은 Activity를 상속한클래스에서 밖에사용이안되어서 데이터를 다시쓰는것은 //MainActivity에서 할수 밖에없었다. 그래서 한꺼번에 처리하려고 했으나,

//FTPService가 Activity를상속하지않아서 외부 MainActivity 에서 처리했다.

fos=openFileOutput("data.xml",MODE_PRIVATE);

//즉각적으로 Bytes해서 바로 써주면된다.그러면 이제 나의 데이터가 수정이된다.

//service.getAddString()은FTPService에서 내가원하는자료로 수정한뒤 데이터이다.

fos.write(service.getAddString().getBytes());

fos.close();

//수정이다되었으면 ftp에 다시 수정한것을 올려준다.

service.uploadFile("data.xml");

}catch(IOException e){

e.printStackTrace();

}

여기까지가 메인에서 FTP를 처리해서 다시 업로드하는 과정이다. 다음번에는 그냥 FTPService 클래스안에서 한꺼번에 모두 처리할수 있도록 수정해봐야 겠다. 이거원 ...

 

그러면 FTPServicef를 한번가보도록 하자

 

import java.io.BufferedReader;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.util.ArrayList;

 

import org.apache.commons.net.ftp.FTP;

import org.apache.commons.net.ftp.FTPClient;

import org.apache.commons.net.ftp.FTPFile;

 

class FTPService{

private FTPClient mFtp;

private String DIR="나의 데이터안의 경로";

//나는 파일1개만수정할것이므로 가져오는데이터이름 로드하는데이터이름 수정하는 데이터이름이 모두 같다. 그래서 fileName을 하나만쓴다.

private String fileName;

//이것은 경로까지포함한 file이다.

private File sourceFile;

private String addString;

private Double lat;

private Double lng;

 

boolean FTPok=false;

 

public FTPService(String fileName,Double lat,Double lng){

this.lat=lat;

this.lng=lng;

this.filename=fileName;

sourceFile=new File(DIR+fileName);

//여기서 부터 실행한다. 일단접속과 파일가져오고,수정까지만하는 작업을한다.

//일단 접속

getFrilFromFTP();

//그다음에 데이터를 가져온다.

FTPGetFile();

try{

//이것이수정하는과정

addString=changeText();

}catch(IOException e){

e.prinStackTrace();

}

}

//이부분은 전부분과 같으니 주석생략 

public void getFileFromFTP(){

if(!FTPConnect("나의 호스트네임")){

return;

}

if(!FTPLogin("아이디","비번")){

FTPClose();

return;

}

}

public boolean FTPConnect(String host){

try{

mFtp=new FTPClient();

mFtp.connect("도메인",포트);

}catch(IOException e){

return false;

}

return true;

}

public boolean FTPLogin(String id,String pw){

try{

if(!mFtp.login(id,pw))

return false;

}catch(IOException e){

return false;

}

return true;

}

public boolean FTPClose(){

try{

mFtp.disconnect();

}catch(IOException e){

return false;

}

return true;

}

//파일 업로드하는 함수!!

public boolean uploadFile(String filename) throws IOException{

boolean flag=false;

InputStream input=null;

 

try{

//이부분에 통파일을 넣어서 올릴데이터를 스트림형태로 넣는다.

input=new FileInputStream(sourceFile);

}catch(FileNotFoundException e){

return flag;

}

try{

//먼저 경로바꾸자

mFtp.changeWorkingDirectory("서버의경로");

//파일타입도 설정해주자!!

mFtp.setFileType(FTP.BINARY_FILE_TYPE);

//이부분에서 계속 해맷는데 파일을 스토어할때는 파일은 통쨰로 넣는것이아니라 getName()으로 이름가져와서 이용해야한다. 이것때문에 고생 ㅜㅜ

if(mFtp.storeFile(sourceFile.getName(),input)){

flag=true;

}

}catch(IOException e){

return flag;

}

FTPok=true;

input.close();

return flag;

}

//ftp에서 파일을 가져오는 부분이다.

public boolean FTPGetFile(){

FileOutputStream os;

File f;

try{

mFtp.changeWorkingDirectory("디렉터리경로설정");

//일단 거기에있는파일들을 가져온다.

FTPFile files[]=mFtp.listFiles();

//모든파일가져오는 과정에서 fileName이있으면 그것을가져와 내꺼에저장한다.

for (int i=0;i<files.length;i++){

if(files[i].getName().equals(fileName)){

//내가 저장할 폴더의 루트로 파일가져올것이다.

f=new File(DIR+files[i].getName());

//값을 써준다.

os=new FileOutputStream(f);

//이것이 핵심적으로 파일을 다운로드하는 로직

mFtp.retrieveFile(files[i].getName(),os);

os.close();

}

}

}catch(IOExcpetion e){

return false;

}

return true;

}

//이부분은 다운로드한 파일에 나의 로직까지 더해서 수정하는 부분이다. 

public String changeText() throws IOException {

BufferedReader br;

StringBuffer sb=new StringBuffer();

//일단 소스파일자체를 가져오도록하자!버퍼에 한줄한줄읽을것이다..

mainActivity면 new FileInputStream말구 openFileInput하면된다. 

br=new BufferedReader(new InputStreamReader(new FileInputStream(sourceFile)))

String str=null;

//중복 된 좌표가있을시 등록하지않는다.오차범위는 소수점4째짜리까지

boolean overlap=false;

//파싱해서 그데이터가 있는지 알아본다.내가만든 클래스로 이클래스는 원하는 데이터를 가져오는 기능을 하게 되어있다.

XMLPullPaser parse=new XMLPullParser();

ArrayList<LatLngInfo> info=new ArrayList<LatLngInfo>();

//거기에있는데이터를 인포에 저장하였다.

info=parse.getInfo();

//오차범위에서 중복 테스트 

for (int i=0;i<info.size();i++){

if((int)(lat*10000) == (int)(info.get(i).getLat()*10000) && 

(int)(lng*10000)==(int)(info.get(i).getLng()*10000)){

overlap=true;

}

}

 

//새로운 지점이면 등록한다. 

while(str=br.readLine())!=null){

if(str.equals("</item>")&&overlap==false){

sb.append("<lat>"+String.valueOf(lat)+"</lat>\n");

sb.append("<lng>"+String.valueOf(lng)+"</lng>\n");

sb.append("<name>이름까지넣어주기</name>\n");

}

sb.append(str+"\n");

}

//overlap은 다시초기화해준다.

overlap=false;

//고친상태에서 addString 으로 수정해서 다시올리기 

addString=sb.toString();

br.close();

return addString;

}

//외부에서 부를때 수정본을 반환한다.

public String getAddString(){

return addString;

}

//외부에서 잘연결됫는지 이것은 업로드까지되야 ok로바뀐다. 

public boolean FTPComplete(){

FTPok;

}

}

휴우,,,여기까지가 ftp에서 업로드하고 다운로드하는 과정이었다 .지금생각해보면 이상한데서 막혔네,, 다스트림 부분에서 많이막혔는데,, 스트림 다시한번이해해야겠다. 정말 쉽게 할수 있었는데,, 조금아쉽네,,, XMLPullPaser부분은 다음번에 수정해서 올리도록해야겠다


List of Articles
번호 제목 날짜 조회 수
257 화면 회전에 따른 애니메이션 효과 구현하기 2015.07.16 8055
256 화면 해상도에 관계없는 레이아웃(Layout) 만들기 file 2015.07.16 8640
255 화면 전환해도 데이터 유지 예제 2015.07.26 9204
254 하이브리드앱 기본 - WebView로 웹페이지 띄우기 file 2020.12.14 1025
253 하이브리드 앱에서의 세션관리(로그인 상태 유지) 2018.12.27 4983
252 푸시 서비스(GCM)에 대해 알아보자 file 2015.07.01 7000
251 푸쉬 알림 기능. GCM (Google Cloud Messaging) 사용하기 (3) file 2015.07.16 6267
250 푸쉬 알림 기능. GCM (Google Cloud Messaging) 사용하기 (2) file 2015.07.16 7292
249 푸쉬 알림 기능. GCM (Google Cloud Messaging) 사용하기 (1) file 2015.07.16 6726
248 폰갭(PhoneGap) 플러그인 사용하기 2015.06.29 7332
247 폰갭(PhoneGap) 플러그인 만들기 2015.06.29 8379
246 폰갭(PhoneGap) 에서 페이지들간의 이동 2015.06.29 8446
245 폰갭(PhoneGap) & jQuery Mobile 로 안드로이드 어플 개발 file 2015.06.29 7839
244 폰갭 비콘 디텍팅 안될 때 (기본적인건 다 되있어야됨) 2015.07.26 6528
243 패키지명을 한꺼번에 변경하기 (Refactor) file 2020.12.14 294
242 특정 폴더에서 오래된 파일 삭제하기 2015.07.16 6767
241 트리뷰(TreeView) 컨트롤 file 2014.10.16 6719
240 탭 뷰에 탭 추가하기, 아이콘 넣기 file 2015.07.16 9358
» 클래스나눠서 xml 파싱과 FTP를이용하여 안드로이드에서 활용하기 2014.08.28 6180
238 카카오톡 분석하기 (2) - 카카오톡 암호화 함수 찾기 file 2016.05.26 9598
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 13 Next
/ 13

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved