메뉴 건너뛰기

?

단축키

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 안드로이드 php 로 mysql json 파싱 하기 2014.08.28 9407
256 FTPClient 를이용하여 ftp상 서버에서 데이터 다운로드 편 2014.08.28 9848
255 XmlPullParser 를이용하여 데이터 가져와보기!! 2014.08.28 7221
254 FTPClient 를이용한 데이터 업로드 하기 2014.08.28 6366
» 클래스나눠서 xml 파싱과 FTP를이용하여 안드로이드에서 활용하기 2014.08.28 6180
252 전화 인텐트와 나의 전화 번호가져오기 2014.08.28 6312
251 사진찍기 및 앨범 에서 사진 가져오기!!! 2014.08.28 13889
250 안드로이드 웹에서 이미지 불러오기!! 2014.08.28 7052
249 맵에 오버레이 추가하여 아이템 넣어보기 2014.08.28 6474
248 실행중인 Service 확인하기 2014.08.28 6595
247 안드로이드 이미지 효율적으로 회전 해보기 2014.08.28 5995
246 WIFI 신호세기 강도 측정하기 2014.08.28 11238
245 WebView 줌 컨트롤러 가리기 2014.08.28 6316
244 ImageVeiw의 현재 리소스 비교하기 2014.08.28 6748
243 HTML5 Speech Input (음성인식) API 2014.09.04 6453
242 HTML5 시작하기 file 2014.09.04 5660
241 CSS3 Rounded Corner, 그림자 효과 사용하기 file 2014.09.04 6755
240 JavaScript 맛보기 file 2014.09.04 6589
239 HTML5로 비디오 보여주기 Video Tag file 2014.09.04 7059
238 HTML5로 나만의 비디오 플레이어 스킨 만들기 -1- CSS file 2014.09.04 6453
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 13 Next
/ 13

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

© k2s0o1d4e0s2i1g5n. All Rights Reserved