다크호스 프로그래머-자바 기반-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
//속성 목록 의 키 집합 을 되 돌려 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();
}
}
안 드 로 이 드 교육,자바 교육,자바 학습 형 기술 블 로그,당신 과 의 교 류 를 기대 합 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.