Java

Java isDirectory()

승모근뭉치 2023. 1. 30. 17:55

========================================

C:\java0901 폴더 내 memo.txt 파일을 새로 만들어 놓는다. memo.txt 파일에 아무 글이나 입력한다.

C:\java0901 폴더 내 ppt 폴더를 새로 만들어 놓는다.

C:\java0901\ppt 폴더 내에는 아무 폴더나 아무 파일을 만들어 놓아도 되고 아무것도 생성하지 않아도 된다.

본인은 C:\java0901\ppt 폴더 내에 anybody 폴더(anybody 폴더 내에는 anybody1.txt), someone 폴더(someone 폴더 내에는 아무것도 생성하지 않았다.), ppt1.txt 파일, ppt2.txt 파일을 새로 만들었다.

========================================

 

 

 

프로젝트 내 src 내 javabaisc 패키지 내 Ex15File.java

package javabasic;

import java.io.File;

public class Ex15File {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String path = "C:/java0901/";
		File file1 = new File(path + "memo.txt");
		File file2 = new File(path + "ppt");
		File file3 = new File(path + "hello.txt");

		System.out.println(file1.isDirectory());// false
		System.out.println(file2.isDirectory());// true
		System.out.println(file1.isFile());// true
		System.out.println(file2.isFile());// false
		System.out.println("memo.txt 는 " + file1.length() + "Byte");

		System.out.println(file1.exists());// 존재하면 true
		System.out.println(file3.exists());// 존재하지 않으므로 false
		System.out.println(file1.getAbsolutePath());// 절대경로
		System.out.println(file2.getAbsolutePath());// 절대경로
		System.out.println(file1.getName());// 파일명만 얻기
		System.out.println(file1.canExecute());// true
		System.out.println(file1.canRead());// true
		System.out.println(file1.canWrite());// true
		// D:\\java0901\\memo.txt
		// D:/java0901/memo.txt

		System.out.println("ppt가 만약 디렉토리라면 목록을 출력하라");
		if (file2.isDirectory()) {
			String[] list = file2.list();
			for (String a : list)
				System.out.println(a);
		}

		System.out.println("파일 삭제하기");
		if (file1.exists()) {
			file1.delete();
			System.out.println("파일1 을 삭제했습니다");
		} else {
			System.out.println("파일 1은 존재하지 않습니다");
		}
		if (file3.exists()) {
			file3.delete();
			System.out.println("파일3 을 삭제했습니다");
		} else {
			System.out.println("파일 3은 존재하지 않습니다");
		}
	}

}
false
true
true
false
memo.txt 는 15Byte
true
false
C:\java0901\memo.txt
C:\java0901\ppt
memo.txt
true
true
true
ppt가 만약 디렉토리라면 목록을 출력하라
anybody
ppt1.txt
ppt2.txt
someone
파일 삭제하기
파일1 을 삭제했습니다
파일 3은 존재하지 않습니다

 

=======================

 

abstract pathname in Java

>>>

한 파일이나 디렉토리가 시스템에 저장될 때, 그 이름을 나타내는 pathname 문자열은 기계에 종속적이다.

한 abstract pathname 은

Unix 에서으 디스크 드라이브 지정자(지정글자) "/" 나 Windows 에서의 디스크 드라이브 지정자(지정글자) "\\" 같은 선택적인 접두사 문자열과

0개 또는 그 이상 갯수의 문자열로 이루어진 이름의 sequence(연속) 으로

구성된다.

접두사 문자열은 platform에 종속적이다. abstract pathname 에서 맨 마지막 이름은 한 파일이나 한 디렉토리를 나타낸다.

모든 다른 이름들은 디렉토리를 나타낸다.

한 abstract pathname 이 한 pathname 문자열로 변환될 때에는, 각각의 이름이 default(기본적인) 이름 구분자로 의해서 그 다음 이름으로부터 분리된다.

예를 들어, File(String pathname) 은 

Windows 플랫폼 상에서는

pathname 문자열인 /Java/myfile.dat 를 

abstract pathname 인 \Java\myfile.dat 로 변환시키며,

Linux 플랫폼 위에서는

pathname 문자열인 /Java/myfile.dat 를

abstract pathname 인 /Java/myfile.dat 로 변환시킨다.

 

=========================

 

File file1 = new File(path + "memo.txt"); 에서 봤을 때

File 클래스는 

파일과 디렉토리 pathname 의 abstract(추상적인) 표현이다.

File 클래스의 인스턴스를 생성하기 위해서는 new 키워드와 함께 File(String pathname) 을 써줘야 한다.

File(String pathname) 은

주어진 pathname 문자열 argument 를 하나으 abstract pathname 으로 변환시키는 것을 이용하여

하나의 새 파일을 생성한다.

즉, File 클래스는 파일과 디렉토리 pathname 을 abstract pathname 으로 표현하는 것인 듯 하다..

그리고 그 변환된 한 abstract pathname, 즉 new File(String pathname) 연산으로 나온 결과가 abstract pathname 인듯 하며, abstract pathname 이 File 클래스의 인스턴스인 어떤 변수에 대입되는 것이다. 예를 들면, 

File file1 = new File(path + "memo.txt"); 일 때 new File(path + "memo.txt") 연산으로 나오는 어떤 플랫폼에 종속적인 abstract pathname 이 file1 이라는 변수에 대입이 되는 듯 하다..

그리고 그런 abstract pathname 은 두 가지 성분을 지닌다:

1. UNIX 루트 디렉토리에 쓰는 디스크 드라이브 지정글자인 "/" 나

    Microsoft Windows UNC pathname 에서 쓰는 디스크 드라이브 지정글자인 "\\\\" 과 같은

    선택적인 시스템-종속적인 접두사와

2. 0개 혹은 그 이상의 문자열이 연속하는 문자열

 

=====================================

 

참고로 UNC pathname 에서 UNC path 는 Universal Naming Convention 으로 간단하게 컴퓨터 상에서

공유되는 폴더를 말한다고 한다. 예를 들면, 그런 공유되는 폴더으 목적은 그리하여 당신이 업그레이드를

할 때, 백 오피스와 주요부서가 그 업그레이드 파일이 어디있는지를 아는 것이며 그 업그레이드 파일에 연결할 수 있는

것이라고 한다. 한 UNC path 의 예로는 \\ComputerName\SharedFolder 이다.

 

(Universal Naming Convention) Unix 공동체에서 만든 기준으로, 이 기준은 네트워크 안에서 서버, 프린터, 그리고 다른

자원을 식별하기 위해 만들어졌다. UNC 경로에서는 컴퓨터이름 앞에 쓰기 위해 두개의 slash 나 두개의 backslash 를

사용한다. 다음 예에서 처럼, 컴퓨터 내에서 그 경로(디스크와 디렉토리들) 는 한개의 slash 나 한개의 backslash 로

나누어진다. DOS/Windows 에서 사용되는 예에서 보이는 것 처럼

드라이브 글자 (c:, d:, 등등.) 가 UNC 이름에서 사용되지 않는다는

것을 주목하자.

//servername/path   Unix

   \\servername\path   DOS/Windows

 

===============================

 

boolean java.io.File.isDirectory()

 

isDirectory() 메서드는 

이 abstract 경로이름(File 클래스의 인스턴스로써의 변수) 으로 표시된 파일이 존재하면서 동시에 디렉토리이면

true 를 반환한다; 그렇지 않고 다른 경우라면 false 를 반환한다.

 

그래서 위의 코드에서 

File file2=new File(path+"ppt"); 를 봐본다.

이 때 C:\java0901 폴더 안에 ppt 라는 디렉토리(폴더)를 새로 만들어 놓지 않는다면 존재하지 않기 때문에

file2.isDirectory() 는 false 를 반환한다.

 

==============================