Файл
Файл является абстрактным представлением «Файл» и «Путь каталога».
Файл непосредственно унаследован от объекта, реализуя сериализуемый интерфейс и сопоставимый интерфейс. Реализация сериализуемого интерфейса означает, что файловые объекты поддерживают операции сериализации. Реализация сопоставимого интерфейса означает, что объекты файлов могут быть размером; Файлы могут быть непосредственно храниться в упорядоченных наборах (таких как Treesset и TreeMap).
1. Общие методы создания новых каталогов
Метод 1: Создайте новый каталог на основе относительного пути.
Пример кода заключается в следующем (создайте новый каталог «Dir» под текущим путем):
File dir = new File ("dir"); dir.mkdir (); Метод 2: Создайте новый каталог на основе абсолютного пути.
Пример кода заключается в следующем (создайте новый каталог "/Home/Skywang/Dir"):
File dir = new File ("/home/skywang/dir"); dir.mkdirs (); Примечание. Выше приведено исходный код нового каталога "/Home/Skywang/Dir" в рамках системы Linux. Под Windows, если вы хотите создать новый каталог "D:/dir", исходный код заключается в следующем:
File dir = new File ("d:/dir"); dir.mkdir (); Метод 3
Uri uri = new Uri ("file:/home/skywang/dir"); File dir = new File (uri); sub.mkdir (); Примечание. Аналогично «Методу 2», за исключением того, что полный путь проходит в «Методе 2», в то время как полный путь проходит в «Метод 3» - это URI, соответствующий полный путь.
2. Несколько общих методов создания нового подкаталога. Например, мы хотим создать новый подкаталог под подкаталогом «Dir» текущего каталога. Есть несколько способов:
Метод 1
File sub1 = новый файл ("dir", "sub1"); sub1.mkdir (); Примечание. Функция вышеуказанного метода состоит в том, чтобы «Dir/sub1» в текущем каталоге. Посылка для того, чтобы он нормально работал, заключается в том, что родительский каталог «DIR» из «Sub1» уже существует!
Метод 2
Файл sub2 = новый файл (dir, "sub2"); sub2.mkdir ();
Примечание. Функция вышеуказанного метода состоит в том, чтобы «dir/sub2» в текущем каталоге. Предпосылка для того, чтобы он нормально работал, заключается в том, что родительский каталог «Dir» из «суб2» уже существует!
Метод 3
File sub3 = новый файл ("dir/sub3"); sub3.mkdirs (); Примечание. Функция вышеуказанного метода состоит в том, чтобы «Dir/sub3» в текущем каталоге. Это не требует, чтобы DIR существовал и может работать нормально; Если родительский путь «sub3» не существует, метод mkdirs () автоматически создаст родительский каталог.
Метод 4
Файл sub4 = новый файл ("/home/skywang/dir/sub4"); sub4.mkdirs (); Примечание. Функция вышеуказанного метода состоит в том, чтобы создать новый каталог "/Home/Skywang/Dir/sub3". Это не требует, чтобы DIR существовал, и он может работать нормально; Если родительский путь «sub4» не существует, метод mkdirs () автоматически создаст родительский каталог.
Метод 5
Uri uri = new URI ("file:/home/skywang/dir/sub5"); Файл sub5 = новый файл (uri); sub5.mkdirs (); Примечание. Аналогично «Методу 4», за исключением того, что полный путь проходит в «Методе 4», в то время как полный путь проходит в «Методе 5», а URI, соответствующий полный путь, проходит.
3. Несколько общих методов создания новых файлов
Например, мы хотим создать новый файл в подкаталоге текущего каталога «Dir». Есть несколько методов 1
try {file dir = new File ("dir"); // Получить объект файла, соответствующий каталогу «dir» файла файла1 = новый файл (dir, "file1.txt"); file1.createnewfile ();} catch (ioexception e) {e.printstacktrace ();} Примечание. Функция приведенного выше кода состоит в том, чтобы создать новый файл «file1.txt» в каталоге «DIR» (относительный путь).
Метод 2
try {file file2 = new File ("dir", "file2.txt"); file2.createnewfile ();} catch (ioexception e) {e.printstacktrace ();} Примечание. Функция приведенного выше кода состоит в том, чтобы создать новый файл «file2.txt» в каталоге «DIR» (относительный путь).
Метод 3
try {file file3 = new File ("/home/skywang/dir/file3.txt"); file3.createnewfile ();} catch (ioexception e) {e.printstacktrace ();} Примечание. Функция приведенного выше кода состоит в том, чтобы создать новый файл "/HOME/SKYWANG/DIR/FILE3.TXT" (Абсолютный путь). Это метод, основанный на абсолютном пути в Linux. В Windows вы можете создать новый файл «d: /dir/file4.txt» через следующий код.
try {file file3 = new File ("d: /dir/file4.txt"); file3.createnewfile ();} catch (ioexception e) {e.printstacktrace ();} Метод 4
try {uri uri = new uri ("file: /home/skywang/dir/file4.txt"); File file4 = новый файл (URI); file4.createnewfile ();} catch (ioexception e) {e.printstacktrace ();} иллюстрировать:
Аналогично «Методу 3», за исключением того, что полный путь проходит в «Методе 3», в то время как полный путь проходит в «Методе 4» - это URI, соответствующий полный путь.
4. Пример использования файлов API
Для получения подробного использования API в файле см. Пример кода (filetest.java):
Импорт java.io.file; импорт java.io.ioexception; import java.net.uri; импорт java.util.calendar; import java.text.simpledateformat; public class filetest {public static void main (string [] args) {testfilestaticFields (); testfiledirapis (); } public static void testFilestaticFields () {// print path -разделитель ":" System.out.printf ("file.pathseparator =/"%s/"/n", file.pathseparator); // распечатать разделитель пути ':' System.out.printf ("file.pathseparatorChar =/"%c/"/n", file.pathseparatorChar); // распечатать делимитер "/" system.out.printf ("file.separator =/"%s/"/n", file.separator); // print delimiter '/' System.out.printf ("file.separatorChar =/"%c/"/n", file.separator); // Распечатать delimiter '/' System.out.printf ("file.separatorChar =/"%c/"/n", file.separatorChar); } public static void testFiledIrapis () {try {// Создать новый каталог "Dir" Dir = новый файл ("dir"); dir.mkdir (); // Метод 1: Создать новый каталог "Dir/sub1". Родительский каталог "Dir" уже должен существовать! Файл sub1 = новый файл ("dir", "sub1"); sub1.mkdir (); // Метод 2: Создать новый каталог "Dir/sub2". Родительский каталог "Dir" уже должен существовать! Файл sub2 = новый файл (dir, "sub2"); sub2.mkdir (); // Метод 3: Создать новый каталог "Dir/sub3". mkdirs () автоматически создаст родительский каталог, которого не существует. File sub3 = новый файл ("dir/sub3"); sub3.mkdirs (); // Метод 4: Создать новый каталог "Dir/sub4". Созданный в соответствии с «абсолютным путем», первые 3 метода создаются на основе «относительного пути». String dirpath = dir.getAbsolutePath (); // Получить абсолютный путь «dir» string sub4abspath = dirpath + file.separator + "sub4"; // file.separator - это разделитель "/" file sub4 = новый файл (sub4abspath); sub4.mkdirs (); // Метод 5: Создать новый каталог "Dir/sub5". Согласно uri string uri_sub5_path = "file:" + dirpath + file.separator + "sub5"; Uri uri_sub5 = new uri (uri_sub5_path); Файл sub5 = новый файл (uri_sub5); sub5.mkdirs (); // Метод 1: Создать новый файл "dir/l1_normal.txt" файл l1_normal = новый файл (dir, "l1_normal.txt"); l1_normal.createnewfile (); // Метод 2: Создать новый файл "Dir/.l1_hide.txt". File l1_hide = new File ("dir", ".l1_hide.txt"); // В Linux файл, начинающийся с "." это скрытый файл. l1_hide.createnewfile (); // Метод 3: Создать новый файл "Dir/l1_abs.txt". String dirabspah = dir.getabsolutepath (); // Получить абсолютный путь DIR String L1_ABS_PATH = DirabSpah+file.separator+"l1_abs.txt"; File l1_abs = new File (l1_abs_path); l1_abs.createnewfile (); //System.out.printf("l1_abs_path=%S/n ", l1_abs_path); //System.out.printf("l1_abs path =%s/n », l1_abs.getabsolutepath ()); // Метод 4: Создать новый файл "Dir/l1_uri.txt". Создать новый файл в соответствии с строкой URI uri_path = "file:" + dirabspah + file.separator + "l1_uri.txt"; Uri uri_l1 = new uri (uri_path); //System.out.printf("uri_l1=%S/n ", l1_abs.getabsolutepath ()); File l1_uri = new File (uri_l1); l1_uri.createnewfile (); // Создать новый файл "dir/sub/s1_normal" файл s1_normal = new File (sub1, "s1_normal.txt"); s1_normal.createnewfile (); System.out.printf (" %30s = %s/n", "s1_normal.exists ()", s1_normal.exists ()); System.out.printf (" %30s = %s/n", "s1_normal.getName ()", s1_normal.getName ()); System.out.printf (" %30s = %s/n", "s1_normal.getParent ()", s1_normal.getParent ()); System.out.printf (" %30s = %s/n", "s1_normal.getPath ()", s1_normal.getPath ()); System.out.printf (" %30s = %s/n", "s1_normal.getabsolutepath ()", s1_normal.getabsolutepath ()); System.out.printf (" %30s = %s/n", "s1_normal.getCanonicalPath ()", s1_normal.getCanonicalPath ()); System.out.printf ("%30s =%s Is/"%s/"/n", "s1_normal.lastmodified ()", s1_normal.lastmodified (), getmodifytime (s1_normal.lastmodified ())); System.out.printf (" %30s = %s/n", "s1_normal.touri ()", s1_normal.touri ()); // Перечислите «файлы» и «папки» в каталоге «DIR». // ПРИМЕЧАНИЕ: DIR.LISTFILES () будет только пройти только DIRE -DIR, а не подкатарии DIR! System.out.println ("--- списки файлы и папки ----"); File [] fs = dir.list -files (); for (file f: fs) {string fname = f.getName (); String absstr = f.isabsolute ()? "[Абсолют]": ""; String hiddenstr = f.ishidden ()? "[Скрытый]" : ""; String dirstr = f.isdirectory ()? "[Каталог]": ""; String fileStR = f.isfile ()? "[Файл]" : ""; System.out.printf («%-30s%s%s%s/n», fname, filestr, dirstr, absstr, hiddenstr); }} catch (Exception e) {e.printstackTrace (); }} частная статическая строка getModifytime (long millis) {// Получить календарь объекта календаря cal = calendar.getinstance (); // установить время в Millis Cal.SetTimeInmillis (миллисы); // Получить отформатированный объект, он отформатирует дату в соответствии с «yyyy-mm-dd HH: MM: SS» SimpleDateFormat sdf = new SimpleDateFormat ("yyyy-mm-dd hh: mm: ss"); //System.out.printf("time %s/n ", str); return sdf.format (cal.gettime ()); }} Запуск результатов (запуск результатов в рамках системы Ubuntu 12.04, а не Windows!):
File.pathseparator = ":" file.pathseparatorChar = ":" file.separator = "/" file.separatorChar = "/" s1_normal.exists () = true s1_normal.getname () = s1_normal.txt s1_normal.getparent () = dir/sub1 s1_normal.get.get.get.get.get.get.get.get.get.get.get.get.get.get.get.get.get.get.get.get.get.get () = getparent () = dir/sub1. dir/sub1/s1_normal.txt s1_normal.getabsolutepath () = /home/skywang/wind_talker/workout/java/skywang/io/io/src/file/dir/sub1/s1_normal.txt s1_normal.getcanoniclepath () = = /HOME/SKYWANG/WIND_TALKER/Workout/java/skywang/io/io/src/file/dir/sub1/s1_normal.txt s1_normal.lastmodified () = 1381730064000-"2013-10-14 13:54:24" Файл: /home/skywang/wind_talker/workout/java/skywang/io/io/src/file/dir/sub1/s1_normal.txt --- Списки [File] [hidden] sub3 [Directory] sub2 [Directory] l1_normal.txt [file]
Результаты: При запуске программы новый каталог «Dir» будет создан в каталоге, где расположен исходный файл, его подкаталоги и подфилы. Как показано на рисунке ниже:
FileScriptor
FileScriptor - это «дескриптор файла».
FileScriptor может использоваться для представления открытых файлов, открытых розеток и т. Д.
Для представления файла FileScriptor: когда FileScriptor представляет файл, мы можем просто рассматривать FileScriptor как файл. Однако мы не можем работать в файле непосредственно через FileScriptor; Если нам нужно работать в файле через FileScriptor, нам необходимо создать файловую часть, соответствующую FileScriptor, а затем работать в файле.
в, ээээээээээээртом введение
(1) В - дескриптор для стандартного ввода (клавиатура)
(2) Out - дескриптор для стандартного вывода (экран)
(3) ERR - Дескрипторы стандартного вывода ошибок (экран) в принципе и использование аналогичны. Давайте проведем углубленные исследования в течение всего.
1.1 Роль и принцип вне
Out - это дескриптор для стандартного вывода (экран). Но что это делает?
Мы можем понять это простым способом, который представляет стандартный вывод (экран). Если мы хотим вывести информацию на экране, мы можем ее управлять; Тем не менее, Out не предоставляет интерфейс для вывода информации на экране (потому что Out, по сути, является объектом FileScriptor, а FileScriptor не имеет выходного интерфейса). Что делать?
Это очень просто. Мы создаем «объект выходного потока», соответствующий OUT, а затем выводим информацию на экран через выходной интерфейс, такой как write () «выходного потока». Следующий код:
try {fileOutputStream out = new FileOutputStream (fileScriptor.out); out.write ('a'); out.close ();} catch (ioexception e) {} Выполните вышеуказанную программу, и буква «A» будет выводиться на экране.
Чтобы облегчить нашу работу, Java давно инкапсулирует «интерфейс, который может легко выводить информацию на экране» для нас: через System.out мы можем легко вывести информацию на экране.
Поэтому мы можем эквивалентно преобразовать вышеуказанную программу в следующий код:
System.out.print ('a'); Давайте поговорим о принципах двух вышеупомянутых кодов, чтобы увидеть определение. Его определение - в FileScriptor.java, а соответствующий исходный код заключается в следующем:
публичный окончательный класс FileScriptor {private int fd; Общественный статический финал FileScriptor Out = new FileScriptor (1); private filedescriptor (int fd) {this.fd = fd; useCount = new AtomicInteger (); } ...} Из этого видно, что
(1) Out - это объект FileScriptor. Он создается через конструктор FileScriptor (int fd).
(2) Операция FILDESCRIPTOR (int FD): присваивайте значения объекту FD (тип int) и создайте новую переменную счета с использованием useCount.
Объект FD является очень важной переменной. «fd = 1» представляет «стандартный выход», «fd = 0» представляет «стандартный вход», а «fd = 2» представляет «стандартный выходной сигнал».
FileOutputStream OUT = new FileOutputStream (fileScriptor.out);
Для создания объекта FileOutputStream (FileDescriptor FDOBJ) для создания объекта FileOutputStream (FileScriptor FDOBJ), соответствующего FileS.Out ».
О том, как System.out определяется. Вы можете ссылаться на «глубокое понимание System.out.println (" Hello World ")"
Через приведенное выше обучение мы знаем, что мы можем настроить потоки стандартных файловых дескрипторов [т.е., в (стандартный вход), Out (стандартный выходной сигнал) и ERR (стандартный вывод ошибок)], чтобы завершить функцию ввода/вывода; Тем не менее, Java инкапсулировала соответствующий интерфейс для нас, то есть мы можем использовать System.in, System.out, System.ERREE более удобно.
Кроме того, мы также можем настроить файловые дескрипторы для «файла», «сокета» и т. Д., А затем работать на них. Обратитесь к TestWrite (), TestRead () и другим интерфейсам в следующем примере кода.
2. Пример кода
Исходный код заключается в следующем (FileScriptortStest.java):
Импорт java.io.printstream; import java.io.filedescriptor; import java.io.fileinputstream; import java.io.fileOutputStream; импорт java.io.ioexception; public class filedescriptortest {private static final string file amame = "file.txt"; частная статическая конечная строка outtext = "hi filedescriptor"; public static void main (string [] args) {testwrite (); testread (); teststandfd (); //System.out.println(Outtext); } /*** Программа тестирования FileScriptor.out** Эффект этой программы эквивалентен System.out.println (Outtext); */ private static void testStandFd () {// Создать соответствующую PrintStream printStream out = new PrintStream (new FileOutputStream (fileScriptor.out)); // Вывод "HI FILEDESCRIPTOR" на экране Out.println (Outtext); out.close (); } /*** Пример образец записи PLEDESCRIPTOR** (1) Чтобы проиллюстрировать: «Создание FileOutputStream по имени файла» эквивалентно «Созданию файла -поставки по файловому дескриптору» «Объект* (2) Программа создаст новый файл» file.txt »в каталоге, где находится« исходный файл », а содержание файла является« aa ». */ private static void testwrite () {try {// Создать объект FileOutPutStream, соответствующий файлу "file.txt" fileOutputStream Out1 = new FileOutputStream (fileName); // Получить «Файл дескриптор», соответствующий файлу «файл». // Создание объекта "fileOutputStream" на основе "файлового дескриптора" fileOutputStream Out2 = new FileOutputStream (fdout); out1.write ('a'); // написать 'a' to "file.txt" через out1 out2.write ('a'); // написать 'a' to "file.txt" через out2 if (fdout! = Null) system.out.printf ("fdout ( %s) IS %s/n", fdout, fdout.valid ()); out1.close (); out2.close (); } catch (ioException e) {e.printstackTrace (); }} / *** FILEDESCRIPTOR ЧИТАЕМ ПРОГРАММУ ЧИТАЙТЕ ПРОГРАММУ** Чтобы проиллюстрировать: «Создать файл iNpetStream под именем файла» эквивалентен «Создать файл descriptor» файла «Объект* / private static void testRead () {try {// create fileInptream объект, соответствующий файлу« file.txt »fileInptream in1 = in1 = fileInptream (fileName); // Получить «Файл дескриптор», соответствующий файлу «файл». // Создать объект "fileInputStream" в соответствии с файлом файла файла descriptor "in2 = new FileInputStream (fdin); System.out.println ("in1.read ():"+(char) in1.read ()); System.out.println ("in2.read ():"+(char) in2.read ()); if (fdin! = null) system.out.printf ("fdin ( %s) %s/n", fdin, fdin.valid ()); in1.close (); in2.close (); } catch (ioException e) {e.printstackTrace (); }}} Результаты работы:
fdout (java.io.filedescriptor@2b820dda) IS truein1.read (): ain2.read (): afdin (java.io.filedescriptor@675b7986) - это truehi falledescriptor