다크호스 프로그래머-자바 기반-IO(2)-File 류,Properties 류,인쇄 흐름,시퀀스 흐름(병합 흐름)

안 드 로 이 드 교육,자바 교육,자바 학습 형 기술 블 로그,당신 과 의 교 류 를 기대 합 니 다! 
제1 강     파일 클래스
개술
1.File 류:파일 과 디 렉 터 리 경로 이름 의 추상 적 인 표현 형식
2.특징:
        1)파일 이나 폴 더 를 대상 으로 봉인 하 는 데 사용
        2)파일 과 폴 더 의 속성 정 보 를 조작 하 는 데 편리 하 다.
        3)File 류 의 인 스 턴 스 는 가 변 적 이지 않다.즉,만 들 면 File 대상 이 표시 하 는 추상 적 인 경로 이름 은 영원히 바 뀌 지 않 는 다 는 것 이다.
        4)File 대상 은 매개 변수 로 흐름 에 전달 할 수 있 는 구조 함수
 
2.File 대상 생 성
방식 1:      
             File f =new File("a.txt");
        a.txt 를 File 대상 으로 밀봉 합 니 다.기 존 파일 이나 폴 더 를 대상 으로 밀봉 할 수 있 습 니 다.
 방식 2:
            File f2=newFile("c:\\abc","b.txt");
        파일 이 있 는 디 렉 터 리 경 로 를 파일 과 함께 전송 하고 파일 경 로 를 지정 합 니 다.
 방식 3:
            File d=new File("c:\\abc");
             File f3=new File(d,"c.txt");
        파일 디 렉 터 리 경 로 를 대상 으로 밀봉 합 니 다.파일 대상 을 다시 만 듭 니 다.부모 디 렉 터 리 에 있 는 파일 의 연관 성 을 낮 추 었 습 니 다.
작은 지식:
        File.separator 는 디 렉 터 리 구분자 로 플랫폼 을 넘 어 사용 할 수 있 습 니 다.경로 에 해당 하 는"\"(쌍 슬 래 쉬\\는 windows 에서 전 의 를 나타 내 는 구분자 이지 만 Liux 시스템 에 서 는 그렇지 않 습 니 다).
 
3.File 류 의 흔 한 방법
1.창설
        booleancreateNewFile();
        //지정 한 위치 에 파일 을 만 듭 니 다.이 파일 이 존재 하면 만 들 지 않 고 false 로 돌아 갑 니 다.출력 흐름 과 달리 출력 흐름 대상 이 만들어 지면 파일 을 만 듭 니 다.그리고 파일 이 이미 존재 합 니 다.덮어 씁 니 다.
        boolean mkdir();//폴 더 만 들 기,1 단계 폴 더 만 들 기
예:
        File dir=new File("abc");
        dir.mkdir();//abc 폴 더 만 들 기
        boolean mkdirs();//다단 계 폴 더 만 들 기
2.삭제
        boolean delete();
        //파일 이나 디 렉 터 리 를 삭제 합 니 다.파일 이 존재 합 니 다.true 로 돌아 갑 니 다.파일 이 존재 하지 않 거나 실행 중 입 니 다.false 로 돌아 갑 니 다.    
        void deleteOnExit();//프로그램 종료 시 지정 한 파일 삭제
3.판단
        boolean canExecute();//실행 가능 한 파일 인지 여부
        boolean exists();//파일 존재 여부
        boolean isFile();//파일 인지 여부
        boolean isDirectory();//폴 더
        boolean isHidden();//숨 김 파일 인지 여부
        boolean isAbsolute();//파일 이 절대 경로 인지 여부
기억 하기:파일 대상 이 파일 이나 디 렉 터 리 인지 판단 할 때 이 파일 대상 이 봉 인 된 내용 이 존재 하 는 지 판단 해 야 합 니 다.exists 를 통 해 판단 하 다.
4.정보 획득
        String getName();//파일 이름 가 져 오기
        String getPath();
        //파일 의 상대 경 로 를 가 져 옵 니 다.(즉,만 든 대상 이 들 어 오 는 인자 가 무엇 인지 가 져 옵 니 다)
        String getParent();
        //파일 부모 디 렉 터 리 가 져 오기.절대 경로 의 부모 디 렉 터 리 를 되 돌려 줍 니 다.상대 경 로 를 가 져 오 면 null 로 돌아 갑 니 다.상대 경로 에 이전 디 렉 터 리 가 있다 면 이 디 렉 터 리 는 결 과 를 되 돌려 주 는 것 입 니 다.
        String getAbsolutePath();//파일 을 가 져 오 는 절대 경로      
        long lastModified();//마지막 으로 수 정 된 파일 의 시간 을 되 돌려 줍 니 다.
        long length();//파일 길이 되 돌리 기
5,목록 파일 및 파일 필터
        static File[] listRoots();//사용 가능 한 파일 시스템 루트 디 렉 터 리,즉 시스템 디스크 를 보 여 줍 니 다.
        String[] list();
        //숨 김 을 포함 하여 현재 디 렉 터 리 에 있 는 모든 파일 을 보 여 줍 니 다.list 방법 을 호출 하 는 file 대상 은 디 렉 터 리 를 패키지 해 야 합 니 다.이 디 렉 터 리 는 아직 존재 해 야 합 니 다.
        String[]list(FilenameFilter filter);
        //지정 한 필 터 를 만족 시 키 는 파일 이나 디 렉 터 리 를 가 져 오 는 문자열 배열 을 되 돌려 줍 니 다.
        //FilenameFilter:파일 이름 필 터 는 인터페이스 입 니 다.accept(Filedir,String name)방법 이 포함 되 어 있 습 니 다.boolean 형 으로 돌아 가 조건 에 맞지 않 는 파일 을 걸 러 냅 니 다.
        File[] listFiles();//추상 적 인 경로 이름 배열 을 되 돌려 현재 폴 더 의 모든 파일 과 폴 더 를 가 져 옵 니 다.
        File[] ListFiles(FilenameFilterfilter);//추상 적 인 경로 이름 배열 을 되 돌려 디 렉 터 리 에 지정 한 필 터 를 만족 시 키 는 파일 이나 디 렉 터 리 를 가 져 옵 니 다.
/*
  : String[] list(FilenameFilter filter)            .java  ,      。
  :1、FilenameFilter        ,        filter  
	  2、  FilenameFilter   accept(File file,String name)  ,   name   java  
	  3、  String    
*/

import java.io.*;
class  GetJavaFile
{
	public static void main(String[] args) 
	{
		File file=new File("E:\\Java Study\\Practice\\day07");
		getJavaFile(file);
	}
	//          .java    
	public static void getJavaFile(File dir)
	{
		//  FilenameFilter         ,   accept  
		String[] javaFile=dir.list(new FilenameFilter()
		{
			public boolean accept(File dir,String name)
			{
				return name.endsWith(".java");//         .java  
			}
		});

		System.out.println("len:"+javaFile.length);
		//    
		for (String s : javaFile )
		{
			System.out.println(s);
		}
	}
}

귀착
1.정의
       함수 내 모든 순환 은 본 기능 을 호출 하여 실현 할 수 있 습 니 다.즉,함수 자체 가 자신 을 호출 하 는 것 입 니 다.이런 표현 형식 이나 프로 그래 밍 기법 을 재 귀 라 고 한다.
2.귀속 주의사항
        a.제한 조건.순환 호출 을 끝 내 러 왔 습 니 다.그렇지 않 으 면 순환 입 니 다.
        b.재 귀적 횟수 에 주의 하고 메모리 가 넘 치지 않도록 하 세 요.자신 을 호출 할 때마다 다음 호출 방법 을 먼저 실행 하기 때문에 스 택 메모리 에 새로운 공간 을 계속 열 고 횟수 가 너무 많 으 면 메모리 가 넘 칠 수 있 습 니 다.
예시 1
/*
  :             ,     ,            (    )。

  ,         ,                    ,               ,         ,         。

*/
import java.io.*;
class  RecursionDemo
{
	public static void main(String[] args) 
	{
		//      
		File dir=new File("e:\\Java Study\\Practice");
		
        //          .java  
		allFileList(dir,0);
	}

	//            
	public static void allFileList(File dir,int level)
	{
		//      
		System.out.println(getLevel(level)+dir);
		level++;
		File[] fileArr=dir.listFiles();//                   
		
        //  
		for (File file : fileArr)
		{
			if(file.isDirectory())
			{
				//         ,        
				allFileList(file,level);
			}
			else
				System.out.println(getLevel(level)+file);//  (  )  
		}	
	}

	//      
	public static String getLevel(int level)
	{
		StringBuilder sb=new StringBuilder();
		sb.append("|--");
		//      ,        
		for (int x=level;x>0 ; x--)
		{
			//sb.append("|--");
			sb.insert(0,"|  ");
		}
		return sb.toString();
	}
}

예시 2
/*
          。
    :
 windows ,             。
         。       。

*/
import java.io.*;
class RemoveDir 
{
	public static void main(String[] args) 
	{
		//    
		File dir=new File("e:\\1");
		//    
        removeDir(dir);

	}

	//      
	public static void removeDir(File dir)
	{
		File[] files=dir.listFiles();//              
		//  
        for (File file : files )
		{
			//          
			if(!file.isHidden()&&file.isDirectory())
				removeDir(file);//          
			else
				System.out.println(file.toString()+":-file-:"+file.delete());//    
		}
		System.out.println(dir+":::dir:::"+dir.delete());//    
	}
}

예시 3
/*
  :
         java       ,          。    java       。
  :
     1、          。
     2、         java     。
     3、           。
     4、               。
*/
import java.util.*;
import java.io.*;

class  JavaFileList
{
	public static void main(String[] args) 
	{
		//    
		File dir=new File("e:/Java Study/Practice");
		
		//    List  ,    .java   File  
		List<File> list =new ArrayList<File>();
		
		//          
		fileToList(dir,list);
		
		//      
		File file=new File(dir,"javafilelist.txt");
		//        
        writeToFile(list,file);
	
	}
	//           java       ,      
	public static void fileToList(File dir,List<File> list)
	{
		File[] files=dir.listFiles();//  dir           ,
		//  
		for (File file : files)
		{
			//     ,     
			if(file.isDirectory())
			{
				list.add(file.getAbsoluteFile());//         
				fileToList(file,list);
			}
			//  .java         
			else if(file.getName().endsWith(".java"))
				list.add(file);
		}
	}

	//                
	public static void writeToFile(List<File> list,File file)
	{
		
		BufferedWriter bw=null;
			
		try
		{	//                 
			bw=new BufferedWriter(new FileWriter(file));
			for (File file0 : list )
			{
				bw.write(file0.getAbsolutePath());//  
				bw.newLine();//  
				bw.flush();//  
			}
		}
		catch (IOException e)
		{
			throw new RuntimeException("      ");
		}
		finally
		{
			try
			{
				if(bw!=null)
					bw.close();//  
			}
			catch (IOException e)
			{
				throw new RuntimeException("       ");
			}
		}
	}
}

 
제2 강      Properties 클래스
개술
1.Properties 는 Hashtable 의 하위 클래스 로 Map 집합 의 특징 을 가진다.그리고 그 안에 저 장 된 키 값 도 있 습 니 다.모두 문자열 이 고 일반적인 정의 가 없습니다.집합 과 IO 기술 이 결합 하고 싶 은 집합 용기 입 니 다.
2.특징:
        1)키 쌍 형식의 프로필 에 사용 할 수 있 습 니 다.
        2)불 러 올 때 데이터 에 고정된 형식 이 필요 합 니 다.주로 키=값 을 사용 합 니 다.
 
2.특유 의 방법
1.설정
        Object setProperty(String key,String value);
        //키 와 값 을 설정 하고 Hashtable 을 호출 하 는 방법 put
2.획득
        String getProperty(String key);
        //키 검색 값 지정
        Set stringPropertyName();
        //속성 목록 의 키 집합 을 되 돌려 set 집합 에 저장 합 니 다.
3.로 딩 흐름 과 저장 흐름
        void load(InputStream ism);
        //입력 바이트 흐름 에서 속성 목록(키 와 요소 쌍)을 읽 습 니 다.스 트림 의 데 이 터 를 집합 에 불 러 오 는 것 이 라 고도 합 니 다.
        void load(Readerreader);
        //입력 문자 흐름 에서 속성 목록 을 읽 습 니 다(키 와 요소 쌍).스 트림 의 데 이 터 를 집합 에 불 러 오 는 것 이 라 고도 합 니 다.
        voidlist(PrintStream out);//지정 한 출력 흐름 에 속성 목록 을 출력 합 니 다.
        void store(OutputStreamout,String comments);
        //load(InputStream)에 대응 하여 속성 목록(키 쌍)을 출력 흐름 에 기록 합 니 다.comments 속성 목록 에 대한 설명 입 니 다.
        void store(Writerwriter, String comments);
        //load(Reader)에 대응 하여 속성 목록(키 쌍)을 출력 흐름 에 기록 합 니 다.comments 속성 목록 에 대한 설명 입 니 다.
예시
//  ,              。
	//   info.txt              。
	/*
		1,     info.txt    。
		2,      ,      "="    。
		3,       ,     。   Properties     。

	*/
		//        Properties    
	public static void method()throws IOException
	{
		//             
		BufferedReader bufr = new BufferedReader(new FileReader("info.txt"));

		String line = null;
		//  Properties  
		Properties prop = new Properties();

		   	while((line=bufr.readLine())!=null)
		{
			String[] arr = line.split("=");//      “=”     
			// =       , =       
			prop.setProperty(arr[0],arr[1]);
		}

		bufr.close();//  

		System.out.println(prop);
	}

연습:
/*
  :            。        ,        。
	
  :
       :   。            ,          ,            。
           ,            。             。      map  。          。  io  。  map+io——>Properties。

  :1、            。       ,     ,   
	  2、    ,          ,   ,    ,      5 ,     1 ,           。
	  3、      5           
*/
import java.util.*;
import java.io.*;

class  RunCount
{
	public static void main(String[] args)throws IOException 
	{
		int count=runCount();
		if(count>5)//          5 ,     ,   
		{
			System.out.println("    ,  !!!!!");
			return ;
		}
		else
			System.out.println("   "+count+" Run!");
	}
	//         
	public static int runCount()throws IOException
	{
		Properties ps=new Properties();//      

		File file=new File("info.ini");//       
		if(!file.exists())//      
			file.createNewFile();
		FileReader fr=new FileReader(file);//           
		
		ps.load(fr);//             

		int count=0;//     
		String value=ps.getProperty("time");//     
		
		if(value!=null)//      null,      count
		{
			count=Integer.parseInt(value);
		}
		count++;//       
		ps.setProperty("time",count+"");//        

		FileWriter fw=new FileWriter(file);
		ps.store(fw,"");//              
		
		fr.close();//  
		fw.close();

		return count;//         
	}
}

 
제3 강    인쇄 흐름
개술
        1.인쇄 흐름 은 PrintStream 과 PrintWriter 를 포함한다.
        2.이 흐름 은 인쇄 방법 을 제공 하여 각종 유형의 데 이 터 를 그대로 인쇄 할 수 있 습 니 다.
 
2.바이트 인쇄 흐름:PrintStream
구조 방법 에서 받 을 수 있 는 매개 변수 유형:
        1.File 대상.File
        2.문자열 경로:String
        3.문자 출력 흐름:Output Stream
 
3.문자열 인쇄 흐름:PrintWriter
구조 방법 에서 받 아들 일 수 있 는 매개 변수 유형
        1.파일 대상:File
        2.문자열 경로:String
        3.바이트 출력 흐름:Output Stream
        4.문자 출력 흐름:Writer
예시
import java.io.*;

class  PrintStreamDemo
{
	public static void main(String[] args) throws IOException
	{
		//    
		BufferedReader bufr = 
			new BufferedReader(new InputStreamReader(System.in));

		//       ,    
		PrintWriter out = new PrintWriter(new FileWriter("a.txt"),true);

		String line = null;

		while((line=bufr.readLine())!=null)
		{
			if("over".equals(line))//    
				break;
			out.println(line.toUpperCase());
			//out.flush();
		}
		
		//  
		out.close();
		bufr.close();

	}	
}

 
제4 강    시퀀스 흐름
개술
1.Sequence InputStream 은 여러 흐름 을 합 친다.합병 흐름 이 라 고도 불 린 다.
2.상용 구조 함수
        SequenceInputStream(Enumeration e)
 
2.여러 스 트림 파일 을 통합 하 는 절 차 를 자주 볼 수 있 습 니 다.
        1.집합 을 만 들 고 스 트림 대상 을 집합 에 추가 합 니 다.
        2.Enumeration 대상 을 만 들 고 집합 요 소 를 추가 합 니 다.
        3.SequenceInputStream 대상 을 만 들 고 스 트림 대상 을 합 친다.
        4.기록 스 트림 대상 만 들 기,FileOutputStream 관련 기록 파일
        5.SequenceInputStream 대상 과 FileOutputStream 대상 을 이용 하여 데 이 터 를 읽 고 쓰 기 를 반복 합 니 다.
예시:
/*
SequenceInputStream
   
  :                     
  :1、    Vector  ,                
	  2、  Enumeration  ,  SequnceInputStream    Enumeration
	  3、          
	  4、      
*/
import java.util.*;
import java.io.*;

class  SequenceInputStreamDemo
{
	public static void main(String[] args)throws IOException
	{
		Vector<InputStream> ve=new Vector<InputStream>();//  vector  ,        
		ve.add(new FileInputStream("1.txt"));
		ve.add(new FileInputStream("2.txt"));
		ve.add(new FileInputStream("3.txt"));

		Enumeration<InputStream> en=ve.elements();//      
		SequenceInputStream sis=new SequenceInputStream(en);//   

		FileOutputStream fos=new FileOutputStream("4.txt");//      
		
		//      
		byte[] buf=new byte[1024];
		int len=0;
		while((len=sis.read(buf))!=-1)
		{
			fos.write(buf,0,len);
		}
		
		//  
		fos.close();
		sis.close();
	}
}

연습:
/*
    
  :   mp3   1M        
  :1、         mp3  
	  2、        1M     ,     ,        

*/
import java.util.*;
import java.io.*;

class  SplitFile
{
	public static void main(String[] args) throws IOException
	{
		//        
		File file=new File("C:\\Users\\asus\\Desktop\\   -      .mp3");
		//         
		splitFile(file);

		//         
		File file1=new File("E:\\Java Study\\Practice\\day20\\splitFile\\     .mp3");
		//              
		merge(file1);

	}
	//      ,   1M      
	public static void splitFile(File file)throws IOException
	{
		//        
		BufferedInputStream bis=new BufferedInputStream(new FileInputStream(file));
		
		BufferedOutputStream bos=null;

		//  1M      
		byte[] buf=new byte[1024*1024];
		int len=0,x=0;
		while ((len=bis.read(buf))!=-1)
		{
			//  1M         
			bos=new BufferedOutputStream(new FileOutputStream("E:\\Java Study\\Practice\\day20\\splitFile\\"+(++x)+".part"));
			bos.write(buf,0,len);
			bos.close();//            
		}
		//  
		bis.close();
	}

	//               
	public static void merge(File file)throws IOException
	{
		//                    
		ArrayList<FileInputStream> al=new ArrayList<FileInputStream>();

		for (int x=1;x<=6 ; x++)
		{
			al.add(new FileInputStream("E:\\Java Study\\Practice\\day20\\splitFile\\"+x+".part"));
		}
		
		//  Enumeration Vector       ,        Enumeration        
		final  ListIterator<FileInputStream> it=al.listIterator();
		Enumeration<FileInputStream> en=new Enumeration<FileInputStream>()
		{
			public boolean hasMoreElements()
			{
				return it.hasNext();
			}

			public FileInputStream nextElement()
			{
				return it.next();
			}
		};

		//      
		SequenceInputStream sis=new SequenceInputStream(en);

		//               
		FileOutputStream fos=new FileOutputStream(file);
		
		//           
		byte[] buf=new byte[1024];
		int len=0;
		while((len=sis.read(buf))!=-1)
		{
			fos.write(buf,0,len);//   
		}

		//  
		fos.close();
		sis.close();

	}

}

 
안 드 로 이 드 교육,자바 교육,자바 학습 형 기술 블 로그,당신 과 의 교 류 를 기대 합 니 다!

좋은 웹페이지 즐겨찾기