마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

sd카드 폴더안에 있는 파일명을 어레이리스트에 담은 값과 비교 질문입니다.

0 추천
public String url[] =  "http://app/movie/movietest.mp4","http://app/movie/movietest1.mp4","http://app/movie/movietest2.mp4"}; 
public String File_folder = "/storage/sdcard0/vizen/";
public File dir = new File(File_folder);
 
if (!dir.exists()) {
dir.mkdir();
}if (dir.exists()) {
File[] allFiles = dir.listFiles();
for (File filefind : allFiles) {
if (filefind.getName().endsWith(".mp4")) {
mp4fFiles.add(filefind);
Log.d("파일폴더내에검색", "뭐머있냐--->" + mp4fFiles);}
}
for (int i = 0; i < 3 ; i++) {
StringTokenizer st2 = new StringTokenizer(url[i],"/");
st2.nextToken();
st2.nextToken();
st2.nextToken();
downfile.add(st2.nextToken());
Log.d("시작할 때", "폴더생성 및 짜르기 --->" +downfile.get(i));
 
소스내용은 대략이렇습니다. 
화면에 들어왔을때 dir 에있는 폴더를 확인 후 없으면 생성합니다.
있으면 url 주소에서 토큰아이저로 앞주소를 자른뒤 파일명만 저장시키도록 downfile 어레이에 담아놧습니다.
로그까지 다 찍히구요 각각 파일명으로 3개의 로그가 뜹니다.
 
이 dowonfile 에있는것과 현재 sd카드에 있는파일 유무를 확인하려고합니다.
if (file!=null&&file.exists()) { 이런방식이아닌 dir안에 파일(총3가지) 와 downfile 에 담아져있는 값 3개와 유무 파악을 해서 있을 시, 또다른 어레이에 true로 없을 시 false 로 저장을 시키고 다른 화면에서 이벤트시 넣으려고하는데요
 
어떻게 유무파악을 하는지 아무리찾아봐도 모르겠습니다 ㅠㅠ 
파일 유무파익이 아닌 폴더안에 있는 파일들을 downfile 어레이에 담겨진값과 유무파악을 하려고하니 어떤식인지 머리가안돕니다 ㅠㅠ 도와주세여

mp4fFiles 에 있는 파일검색을 확인했습니다..  로그찍으면 그 해당폴더안에 파일명이 찍히구요

그럼 이제 downfile 어레이담겨져있는 3개의 값과 mp4fFiles 에 담겨있는 (현재보유한파일) 2개의 파일명과 비교문을 짜서 동일 시 트루 아닐 시 펄스를 넣으려고하는데 이 두개의값 비교하는방법을 모르겠습니다.

콜벳 (7,150 포인트) 님이 2014년 8월 4일 질문
콜벳님이 2014년 8월 4일 수정

2개의 답변

0 추천
 
채택된 답변
ArrayList<String> as1 = new ArrayList<String>();
as1.add("haha1");
as1.add("haha2");
as1.add("haha3");
 
ArrayList<String> as2 = new ArrayList<String>();
as2.add("haha1");
 
System.out.println("Before =========================================");
System.out.println("as1 = " + as1.toString());
System.out.println("as2 = " + as2.toString());
System.out.println("Before =========================================");
 
Iterator<String> iterator = as1.iterator();
while (iterator.hasNext()) {
String s = iterator.next();
if (!as2.contains(s)) {
as2.add(s);
}
}
 
System.out.println("After =========================================");
System.out.println("as1 = " + as1.toString());
System.out.println("as2 = " + as2.toString());
System.out.println("After =========================================");
 
좋은 예는 아니지만 응용해보세요.
as2 에 as1의 원소가 없을 경우 없는 원소를 as2로 복사합니다.
Gioskhan (12,060 포인트) 님이 2014년 8월 4일 답변
콜벳님이 2014년 8월 4일 채택됨
감사합니다. 좀 응용해서 파일명 비교를 하게끔 했네요^^ 감사합니다
제가 좋은 예가 아니라고 말씀 드린 이유는 갖고 있는 배열의 동기화 문제가 발생할 수 있기 때문입니다. ConcurrentModificationException 등의 예외가 발생할 수 있으므로 배열 변수를 사용하실 때 synchronized 등을 사용해서 동기화 문제가 발생치 않도록 유념해서 사용하세요
0 추천

시간이 남아서 유틸 함수로 하나 만들어봤어요...

좀더 다듬어서 사용하시면. 좋을듯해요.. ㅎㅎ

참고만 하세요~~ ^^

 

ArrayList<String> downloadFileList = new ArrayList<String>(); // 파일 명들을 담구요,.

downloadFileList.add("http://app/movie/movietest.mp4");

downloadFileList.add("http://app/movie/movietest1.mp4");

downloadFileList.add("http://app/movie/movietest2.mp4");

 

//File_folder에 맞게 수정해 보세요.. ㅎㅎ

File file = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);

 

if (file.isDirectory()) 

for (String string : downloadFileList) {

String downloadFileName = string.substring(string.lastIndexOf("/") +1 ); //String 에 lastIndexOf 를 사용해야. .나중에 URL이 변경되도.. 문제가 없을것 같았어요

if (isSameFileNameExist(file, downloadFileName)) // 유틸 메소드를 호출해요..

Log.v("TAG", "File Exist");

else

Log.v("TAG", "File Not Exist ");

}

 

// 파일을 비교하는 함수에요.. 찾을 디렉토리와 파일명을 인자로 같지요~

boolean isSameFileNameExist(File directory, final String downloadfileName) {

 

File[] resultFiles = directory.listFiles(new FilenameFilter() {

public boolean accept(File directory, String fileName) {

return fileName.equals(downloadfileName);

}

});

 

if (resultFiles.length == 0) {

return false;

} else {

return true;

}

 

}

Yong-Yong (3,500 포인트) 님이 2014년 8월 4일 답변
감사합니다~ 한번써보겠습니다!
...