从文件夹及其子文件夹中读取文件并转换为一个属性文件java

时间:2018-02-14 07:03:40

标签: java json java-8 properties-file

我想从资源文件夹中读取文件夹和子文件夹,并将文件夹及其子文件夹中的所有json文件转换为一个属性文件。

资源文件夹只包含json文件。

下面的代码是从资源文件夹中读取文件。的资源/信道/ SMS

内部频道,我有不同的文件夹,如mms,聊天等..

有人,请帮我读取文件夹及其子文件夹中的所有json文件,并将它们转换为一个属性文件。

 public void loadFile() throws IOException {
    String folder = "/channel/sms";
    List<String> files = IOUtils.readLines(getClass().getClassLoader().getResourceAsStream(folder), Charsets.UTF_8);
    System.out.println(JSONUtil.toJSON(files));         
 }

有人可以帮我将JSON文件转换为属性文件。 Json 文件名应为密钥应为文件值。

示例:

helloWorld.json

{
    "KEY1": {
        "KEY2": "Hello"
    },
    "KEY3":"World"
}

属性文件应为:

helloWorld = { "KEY1": { "KEY2": "Hello"}, "KEY3":"World"}

先谢谢。

2 个答案:

答案 0 :(得分:0)

您可以尝试此代码,我已成功测试

这里是文件夹内的json文件(D:// test //)

我们的一个属性文件路径(D:\ properties \ property.properties)

package com.pms.lot;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;

import org.apache.commons.io.FilenameUtils;

/*sibin*/
 public class CustomTest {

public static void main(String ard[]) {

    /* Function to get File Name */
    File folder = new File("D://test");
    File[] listOfFiles = folder.listFiles();

    for (int i = 0; i < listOfFiles.length; i++) {
        if (listOfFiles[i].isFile()) {
            String fileName = listOfFiles[i].getName();
            String basename = FilenameUtils.getBaseName(fileName);
            try {
                byte[] encoded = Files.readAllBytes(Paths.get("D://test//" + listOfFiles[i].getName()));
                String str = new String(encoded, StandardCharsets.UTF_8);

                System.out.println(basename + "=" + str);

                // Insertion

                /* create text file and insert text */

                String fileNames = "D:\\properties\\property.properties";

                BufferedWriter bw = null;
                FileWriter fw = null;

                try {

                    String content = basename + "=" + str;

                    fw = new FileWriter(fileNames,true);
                    bw = new BufferedWriter(fw);
                    bw.write(content);

                    System.out.println("Done");

                } catch (IOException e) {

                    e.printStackTrace();

                } finally {

                    try {

                        if (bw != null)
                            bw.close();

                        if (fw != null)
                            fw.close();

                    } catch (IOException ex) {

                        ex.printStackTrace();

                    }

                }

            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        } else if (listOfFiles[i].isDirectory()) {
            System.out.println("Directory " + listOfFiles[i].getName());
        }
    }
    /**/

}

}

答案 1 :(得分:0)

我在这里使用 Java 8

工作代码段

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.stream.Stream;

public class ReadFiles {

    public static void main(String args[]) {

        try (Stream<Path> paths = Files.walk(Paths.get("parent"))) {
            paths.filter(Files::isRegularFile).forEach(ReadFiles::convert);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void convert(Path name) {
        try {
            // using java 8
            Path output = Paths.get("property.properties");
            // read json file from all folder and subfolder and make a single
            // line string
            String content = new String(Files.readAllBytes(Paths.get(name.toUri()))).replaceAll("[\t\r\n]", "");
            // append filename
            String str = name.getFileName() + "= " + content + "\n";
            // write into properties file
            Files.write(output, str.getBytes(), StandardOpenOption.APPEND);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

这是文件夹结构

This is my folder structure

这是输出属性文件

helloword.json= {"KEY1": {"KEY2": "Hello"},"KEY3": "World"} 
hellowordparent.json= {"Details": {"Name": "Dhiraj"},"Surname": "Pandit"}