Browse Source

!106 添加获取class当前文件夹名称方法
Merge pull request !106 from 解雷/v5-dev

Looly 5 years ago
parent
commit
135b172653

+ 17 - 0
hutool-core/src/main/java/cn/hutool/core/io/FileUtil.java

@@ -3578,4 +3578,21 @@ public class FileUtil {
 	public static void tail(File file, Charset charset) {
 	public static void tail(File file, Charset charset) {
 		FileUtil.tail(file, charset, Tailer.CONSOLE_HANDLER);
 		FileUtil.tail(file, charset, Tailer.CONSOLE_HANDLER);
 	}
 	}
+
+	/**
+	 * 获取class类当前文件夹, 不管是否在jar包中都会返回文件夹的路径
+	 * class在jar包中返回jar所在文件夹,class不在jar中返回文件夹目录
+	 * jdk中的类不能使用此方法
+	 */
+	public static String getClassDir(Class clazz) {
+		String currentDir = null;
+		File file = new File(clazz.getProtectionDomain().getCodeSource().getLocation().getPath());
+		if (file.isFile()) {
+			currentDir = file.getParentFile().getAbsolutePath();
+		} else {
+			currentDir = file.getAbsolutePath();
+		}
+		return currentDir;
+	}
+
 }
 }

+ 13 - 5
hutool-core/src/test/java/cn/hutool/core/io/file/TailerTest.java

@@ -1,23 +1,31 @@
 package cn.hutool.core.io.file;
 package cn.hutool.core.io.file;
 
 
-import org.junit.Ignore;
-import org.junit.Test;
-
 import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.util.CharsetUtil;
 import cn.hutool.core.util.CharsetUtil;
+import lombok.Data;
+import org.junit.Ignore;
+import org.junit.Test;
 
 
 public class TailerTest {
 public class TailerTest {
-	
+
 	@Test
 	@Test
 	@Ignore
 	@Ignore
 	public void tailTest() {
 	public void tailTest() {
 		FileUtil.tail(FileUtil.file("e:/tail.txt"), CharsetUtil.CHARSET_GBK);
 		FileUtil.tail(FileUtil.file("e:/tail.txt"), CharsetUtil.CHARSET_GBK);
 	}
 	}
-	
+
 	@Test
 	@Test
 	@Ignore
 	@Ignore
 	public void tailWithLinesTest() {
 	public void tailWithLinesTest() {
 		Tailer tailer = new Tailer(FileUtil.file("f:/test/test.log"), Tailer.CONSOLE_HANDLER, 2);
 		Tailer tailer = new Tailer(FileUtil.file("f:/test/test.log"), Tailer.CONSOLE_HANDLER, 2);
 		tailer.start();
 		tailer.start();
 	}
 	}
+
+	@Test
+	@Ignore
+	public void testDir() {
+		System.out.println(FileUtil.getClassDir(FileUtil.class));
+		System.out.println(FileUtil.getClassDir(Data.class));
+		System.out.println(FileUtil.getClassDir(Test.class));
+	}
 }
 }