Java 编写一个输出自身源代码的程序

简介

今天朋友给我讲了一道非常有意思的题目,题目为

编写一个输出自身源代码的程序。

这个题目非常的新颖,思维也非常的发散。可见出这道题目的人真他娘的是个人才

思路

我的思路是先定位该程序的位置。让程序自己能够找到自己,并且输出他自己所在的文件夹的路径。

之后就比较简单了嘛。就是根据路径读取出该路径下所有的文件。

第一步获取当前程序所在的路径,借鉴的是这位大佬的博文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]);
        }
    }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值