简介
今天朋友给我讲了一道非常有意思的题目,题目为
编写一个输出自身源代码的程序。
这个题目非常的新颖,思维也非常的发散。可见出这道题目的人真他娘的是个人才
思路
我的思路是先定位该程序的位置。让程序自己能够找到自己,并且输出他自己所在的文件夹的路径。
之后就比较简单了嘛。就是根据路径读取出该路径下所有的文件。
第一步获取当前程序所在的路径,借鉴的是这位大佬的博文java获得当前文件路径
第二步,这也是大部分借鉴这位大佬的博文Java读取文件夹下的所有文件名和文件内容
好吧,我承认一写代码就到处借鉴可见我的Java功底还是不够,要好好学习了
下面让我们看一下代码
代码
import java.io.*;
import java.util.HashMap;
import java.util.Map;
/**
* 编写一个输出自身源代码的程序。
*/
public class printHisSelf {
public static Map<String,String> files = new HashMap<>();
public static void main(String[] args) {
System.out.println(System.getProperty("user.dir"));
getFileDatas(System.getProperty("user.dir"));
for (String key :files.keySet()) {
String value = files.get(key);
String suffix = key.substring(key.lastIndexOf(".") + 1);
if ("java".equals(suffix)){
System.out.println("文件名为:"+key+" 的内容是:\n"+value);
}
}
}
private static void getFileDatas(String filePath) {
File file = new File(filePath);
String[] fileNameList = file.list();
File[] filePathList = file.listFiles();
for (int i = 0; i < filePathList.length; i++) {
if(filePathList[i].isFile()){
String fileData = null;
try {
fileData = readFile(filePathList[i]);
} catch (IOException e) {
e.printStackTrace();
}
files.put(fileNameList[i],fileData);
}else {
getFileDatas(filePathList[i].getAbsolutePath());
}
}
return;
}
private static String readFile(File filePath) throws IOException{
InputStream is = new FileInputStream(filePath);
byte[] bytesIO = new byte[1024];
int len = is.read(bytesIO);
String string = null;
StringBuffer res = new StringBuffer();
while (len!=-1){
string = new String(bytesIO,0,len);
res.append(string);
len=is.read(bytesIO);
}
is.close();
string = String.valueOf(res);
return string;
}
}
更正
对于输出自身的题目本来应该是一道算法题,当时并没有往算法方面想
下面是输出本身程序的代码~
public class printHisSelf2 {
public static void main(String []args) {
char c = 34;
String s[] = {
"public class HelloWord{",
" public static void main(String []args){",
" char c = 34;",
" String s[] ={",
" ",
" };",
" for(int i=0; i<4; i++)",
" System.out.println(s[i]);",
" for(int i=0; i<s.length; i++)",
" System.out.println(s[4]+c+s[i]+c+',');",
" for(int i=5; i<s.length; i++)",
" System.out.println(s[i]);",
" }",
"}"
};
for(int i=0; i<4; i++) {
System.out.println(s[i]);
}
for(int i=0; i<s.length; i++) {
System.out.println(s[4]+c+s[i]+c+',');
}
for(int i=5; i<s.length; i++) {
System.out.println(s[i]);
}
}
}