14 Mart 2018 Çarşamba

Files Sınıfı

Giriş
Şu satırı dahil ederiz.
import java.nio.file.Files;
Bu sınıf ObjectsArrays gibi tamamen static metodlardan oluşan yardımcı bir sınıftır. Açıklaması şöyle.
This class consists exclusively of static methods that operate on files, directories, or other types of files.
copy metodu Path + Path
Açıklaması şöyle
By default, the copy fails if the target file already exists
Şöyle yaparız. File nesneleri yine Path tipine çevriliyor.
void copyFile(File source, File dest) throws IOException {
  Files.copy(source.toPath(), dest.toPath());
}
copy metodu Path + Path + options
Şöyle yaparız.
Path sourceFile = ...;
Path targetFile = ...;
// copy..
Files.copy(sourceFile,targetFile, StandardCopyOption.REPLACE_EXISTING);
copy metodu - InputStream+ Path + options
Örnek
Şöyle yaparız
InputStrean src = ...;
Path dest = ...;
Files.copy(src, dest, StandardCopyOption.REPLACE_EXISTING);
Örnek
Şöyle yaparız.
URL url = ...;
Path targetPath = ...;
Files.copy(url.openStream(), targetPath,StandardCopyOption.REPLACE_EXISTING);
createDirectory metodu
Şöyle yaparız. Metod exception atabilir.
Path dirPath = ...;
if(Files.notExists(dirPath)){
  try{
    Files.createDirectory(dirPath);
  } catch(java.io.IOException e){
   ...
  }
}
createDirectories metodu
Şöyle yaparız.
Path path = ...;
Files.createDirectories(path);
getLastModifiedTime metodu
Şöyle yaparız.
FileTime t = Files.getLastModifiedTime(path);
isRegularFile metodu
Şöyle yaparız.
Path filePath = ...;
if (Files.isRegularFile(filePath)) {...}
isWritable metodu
Şöyle yaparız.
Path path = Paths.get("path/to/my/file");

// is it writable? If no, consider "read only"
boolean canWrite = Files.isWritable(path);
lines metodu
Şöyle yaparız.
String file = ...;
try(Stream<String> stream = Files.lines(Paths.get(file))) {
  stream....;
}
move metodu - source + target + options
Açıklaması şöyle.
Move or rename a file to a target file.
Örnek
Şöyle yaparız.
Path fileToMovePath = ...;
Path targetPath = ...;
Files.move(fileToMovePath, targetPath.resolve(fileToMovePath.getFileName()));
Örnek
Şöyle yaparız.
Files.move(src, dst, StandardCopyOption.ATOMIC_MOVE);
newBufferedWriter metodu
Şöyle yaparız.
BufferedWriter w = Files.newWriter(file, Charsets.UTF_8);
newByteChannel metodu
Şöyle yaparız.
Path path = Paths.get(lfile);
SeekableByteChannel sbc = Files.newByteChannel(path, StandardOpenOption.READ);
newDirectoryStream metodu
Sadece verilen dizini dolaşır. Yani özyinelemeli (recursive) değildir. Şöyle yaparız.
Path searchPath = Paths.get("c://log");
try (DirectoryStream<Path> fileList = Files.newDirectoryStream(searchPath)) {
  for (Path path : fileList) {
    System.out.println(path.getFileName());
}
newInputStream metodu
Elimizde bir path olsun
Path path = Paths.get("path/to/my/file");
Şöyle yaparız.
try (
    final InputStream in = Files.newInputStream(path);
) {
    // work with "in"
}
newOutputStream metodu
Dosya yoksa yaratılır. Varsa sonuna ekleme yapılır. Şöyle yaparız.
Path source1 = Paths.get("src1.txt");
Path source2 = Paths.get("src2.txt");

Path destination = Paths.get("dest.txt");    
out = Files.newOutputStream(destination, CREATE, APPEND);

Files.copy(source1, destination, StandardCopyOption.REPLACE_EXISTING);
Files.copy(source2, destination);
notExists metodu
Şöyle yaparız.
Path dirPath = ...;
if(Files.notExists(dirPath)){
  Files.createDirectory(dirPath);
}  
readAllBytes metodu
İçi şöyle. Stream'in açılıp kapatıldığı görülebilir.
public static byte[] readAllBytes(Path path) throws IOException {
  try (SeekableByteChannel sbc = Files.newByteChannel(path);
    InputStream in = Channels.newInputStream(sbc)) {
    long size = sbc.size();
    if (size > (long)MAX_BUFFER_SIZE)
      throw new OutOfMemoryError("Required array size too large");

    return read(in, (int)size);
  }
}
readAttributes metodu
BasiFileAttributes nesnesi döner. Şöyle yaparız
Path file = ...;
BasicFileAttributes attr = Files.readAttributes(file, BasicFileAttributes.class);
setPosixFilePermissions metodu
Şu satırı dahil ederiz.
import java.nio.file.attribute.BasicFileAttributes;
import java.nio.file.attribute.PosixFilePermission;
import java.nio.file.attribute.PosixFilePermissions;
Örnek
Elimizde şu kod olsun
Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rwxr-xr-x");
Şöyle yaparız.
Path path = ...;
Files.setPosixFilePermissions(path, perms);
walk metodu
Java 8 ile geldi. Stream<Path> tipinden bir nesne döndürür. Özyinelemeli (recursive) olarak dizini dolaşır.
Örnek
Şöyle yaparız.
Path path = //...
try {
    Files.walk(path).map(Path::getFileName).forEach(System.out::println);
} catch (IOException e) {
    e.printStackTrace();
}
Örnek
Şöyle yaparız.
Files.walk(configFilePath)
  .filter(s -> s.toString().endsWith(".txt"))
  .map(Path::getFileName)
  .sorted()
  .collect(toList());
Örnek
File listesine çevirmek için şöyle yaparız.
List<File> filesInFolder = Files
  .walk(Paths.get("C:/Users/Desktop/read"))
  .filter(Files::isRegularFile)
  .map(Path::toFile)
  .collect(Collectors.toList());
Bu kod yerine eski File.listFiles çok daha kolay olabilir. Şöyle yaparız.
File file = new File("C:/Users/Desktop/read");
File[] filesInFolder = file.listFiles();
walkFileTree metodu
Java 7 ile geliyor.
Örnek
SimpleFileVisitor sınıfını kullanarak şöyle yaparız.
Path path = ...;
Files.walkFileTree(path, new SimpleFileVisitor<Path>(){...});
Örnek
FileVisitor arayüzünü kullanarak şöyle yaparız.
Path path = ...;

Files.walkFileTree(path, new FileVisitor<Path>() {...});
Örnek
Şöyle yaparız.
Path src = ...;
Files.walkFileTree(src, 
                   EnumSet.of(FileVisitOption.FOLLOW_LINKS), 
                   Integer.MAX_VALUE,
                   new SimpleFileVisitor<Path>() {...}
);
write metodu - byte [] + options
Şöyle yaparız.
try {
  Files.write(Paths.get("f.txt"), "text".getBytes(), StandardOpenOption.APPEND);
}catch (IOException e) {
  ...
}
Dosya yoksa yaratmak, varsa ekleme yapmak için şöyle yaparız.
String message = "bla";
Files.write(
  Paths.get(".queue"),
  message.getBytes(),
  StandardOpenOption.CREATE,
  StandardOpenOption.APPEND);
write metodu - byte [] + charset
Şöyle yaparız.
Path path = ...;
Files.write(path,"text".getBytes(),StandardCharsets.UTF_8);

Hiç yorum yok:

Yorum Gönder