import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.nio.file.attribute.BasicFileAttributes;
public class PathDemo {
public static void main(String[] args) {
createTestDirectoryStructure();
Path path = Paths.get(".\\testroot\\path1\\sub1\\..\\sub2\\file1");
System.out.printf("File:\"%s\" %n\t File name:%s %n\t Parent name:%s %n\t Root:%s %n\t Absolute:%b %n",path,path.getFileName(), path.getParent(), path.getRoot(),path.isAbsolute());
System.out.printf("%n\t Name count:%d %n\t First name:%s %n\t Third name:%s %n",path.getNameCount(), path.getName(0), path.getName(1));
System.out.printf("%n\t URI:%s%n",path.toUri());
/** OUTPUT
File:".\testroot\path1\sub1\..\sub2\file1"
File name:file1
Parent name:.\testroot\path1\sub1\..\sub2
Root:null
Absolute:false
Name count:7
First name:.
Third name:testroot
URI:file:///D:/dev_root/eclipse_workspace/PathDemo/./testroot/path1/sub1/../sub2/file1
*/
// Absolute Path
path = path.toAbsolutePath();
System.out.printf("File:\"%s\" %n\t File name:%s %n\t Parent name:%s %n\t Root:%s %n\t Absolute:%b %n",path,path.getFileName(), path.getParent(), path.getRoot(),path.isAbsolute());
System.out.printf("%n\t Name count:%d %n\t First name:%s %n\t Third name:%s %n",path.getNameCount(), path.getName(0), path.getName(1));
System.out.printf("%n\t URI:%s%n",path.toUri());
/** OUTPUT
File:"D:\dev_root\eclipse_workspace\PathDemo\.\testroot\path1\sub1\..\sub2\file1"
File name:file1
Parent name:D:\dev_root\eclipse_workspace\PathDemo\.\testroot\path1\sub1\..\sub2
Root:D:\
Absolute:true
Name count:10
First name:dev_root
Third name:eclipse_workspace
URI:file:///D:/dev_root/eclipse_workspace/PathDemo/./testroot/path1/sub1/../sub2/file1
*/
// Normalized Path
Path normalizedPath = path.normalize();
System.out.printf("File:\"%s\" %n\t File name:%s %n\t Parent name:%s %n\t Root:%s %n\t Absolute:%b %n",normalizedPath,normalizedPath.getFileName(), normalizedPath.getParent(), normalizedPath.getRoot(),normalizedPath.isAbsolute());
System.out.printf("%n\t Name count:%d %n\t First name:%s %n\t Third name:%s %n",normalizedPath.getNameCount(), normalizedPath.getName(0), normalizedPath.getName(1));
System.out.printf("%n\t URI:%s%n",normalizedPath.toUri());
/**
File:"D:\dev_root\eclipse_workspace\PathDemo\testroot\path1\sub2\file1"
File name:file1
Parent name:D:\dev_root\eclipse_workspace\PathDemo\testroot\path1\sub2
Root:D:\
Absolute:true
Name count:7
First name:dev_root
Third name:eclipse_workspace
URI:file:///D:/dev_root/eclipse_workspace/PathDemo/testroot/path1/sub2/file1
*/
// sub path
for(Path p:path.subpath(0, 3)){
System.out.println(p);
}
/** OUTPUT
dev_root
eclipse_workspace
PathDemo
*/
// Equality Test
try {
System.out.printf("path.equals(path2):%b %nFiles.isSameFile(path1, path2):%b",normalizedPath.equals(path),Files.isSameFile(normalizedPath, path));
} catch (IOException e) {
e.printStackTrace();
}
/** OUTPUT
path.equals(path2):false
Files.isSameFile(path1, path2):true
*/
// Existence, Permissions
try {
System.out.printf("%n\t Exists:%b %n\t Regular File:%b %n\t Is Directory:%b %n\t Is Hidden:%b %n\t Is Symbolic Link:%b %n\t Executable:%b %n\t Readable:%b %n\t Writable:%b %n",Files.exists(path),
Files.isRegularFile(path), Files.isDirectory(normalizedPath),Files.isHidden(normalizedPath),Files.isSymbolicLink(normalizedPath),Files.isExecutable(path), Files.isReadable(path),Files.isWritable(path));
} catch (IOException e) {
e.printStackTrace();
}
/** OUTPUT
Exists:true
Regular File:true
Is Directory:false
Is Hidden:false
Is Symbolic Link:false
Executable:true
Readable:true
Writable:true
*/
// File Attributes
BasicFileAttributes fileAttributes=null;
try {
fileAttributes = Files.readAttributes(path,
BasicFileAttributes.class);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("File size: " + fileAttributes.size());
System.out.println("File last accessed time: " + fileAttributes.lastAccessTime());
System.out.println("File last modified time: " + fileAttributes.lastModifiedTime());
System.out.println("File creation time: " + fileAttributes.creationTime());
/** OUTPUT
File size: 0
File last accessed time: 2013-10-16T19:08:15.113184Z
File last modified time: 2013-10-16T19:08:15.113184Z
File creation time: 2013-10-16T19:08:15.113184Z
*/
// Copying Files
Path targetPath = Paths.get("testroot\\path1\\sub1\\file1");
try {
Files.copy(path, targetPath,StandardCopyOption.REPLACE_EXISTING);// will overwrite file1 under sub1 directory
Files.move(path, path.getParent().resolve("file2"));// just rename file1 to file2
Files.delete(path.getParent().resolve("file2"));// delete file2
// eventually copied version of file1 will be under sub1 directory. sub2 directory will be empty.
} catch (IOException e) {
e.printStackTrace();
}
}
private static void createTestDirectoryStructure() {
Path path1 = Paths.get("testroot\\path1\\sub1");
Path path2 = Paths.get("testroot\\path1\\sub2");
try {
// create all directories
Files.createDirectories(path1);
// create only sub2 directory
Files.createDirectories(path2);
// create files under path1
Files.createFile(path1.resolve("file1"));
// create files under path2
Files.createFile(path2.resolve("file1"));
} catch (IOException e) {
e.printStackTrace();
}
}
}
Introduction Obfuscation is the act of reorganizing bytecode such that it becomes hard to decompile. Many developers rely on obfuscation to save their sensitive code from undesired eyes. Publishing jars without obfuscation may hinder competitiveness because rivals may take advantage of easily decompilable nature of java binaries. Objective Spring Boot applications make use of public interfaces, annotations which makes applications harder to obfuscate. Additionally, maven Spring Boot plugin creates a fat jar which contains all dependent jars. It is not viable to obfuscate the whole fat jar. Thus obfuscating Spring Boot applications is different than obfuscating regular java applications and requires a suitable strategy. Audience Those who use Spring Boot and Maven and wish to obfuscate their application using Proguard are the target audience for this article. Sample Application As the sample application, I will use elastic search synch application from my G...
Comments
Post a Comment