在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java/ 一段讀取文件轉換成字符串的代碼,請問如何優(yōu)化,并且根據(jù)文件夾中文件的數(shù)量讀取文件

一段讀取文件轉換成字符串的代碼,請問如何優(yōu)化,并且根據(jù)文件夾中文件的數(shù)量讀取文件

問題一

我想優(yōu)化下面這段代碼

問題二

我在讀取文件之前,先獲取文件夾中文件的數(shù)量,然后根據(jù)文件的數(shù)量遍歷文件,將文件轉換成字符串

// 文件解析成字符串

        ClassLoader classLoader = TelecomThreeListener.class.getClassLoader();

        URL resource = classLoader.getResource("bauschData/selectData01.json");
        String path = resource.getPath();
        //System.out.println(path);
        String fileName01 = path;

        resource = classLoader.getResource("bauschData/selectData02.json");
        path = resource.getPath();
        String fileName02 = path;

        resource = classLoader.getResource("bauschData/selectData03.json");
        path = resource.getPath();
        String fileName03 = path;

        // 默認讀取文件

        File file = new File(fileName01);
        StringBuffer sb = new StringBuffer();
        String line;
        BufferedReader br=null;

        // 數(shù)據(jù) - 無

        try {
            br=new BufferedReader(new FileReader(file));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        try {
            while((line=br.readLine())!=null){
                sb.append(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        String nothing = sb.toString();


        // 數(shù)據(jù) - 1

        file = new File(fileName01);
        sb = new StringBuffer();
        try {
            br=new BufferedReader(new FileReader(file));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        try {
            while((line=br.readLine())!=null){
                sb.append(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        String bauschDataJson01 = sb.toString();

        // 數(shù)據(jù) - 2

        file = new File(fileName02);
        sb = new StringBuffer();
        try {
            br=new BufferedReader(new FileReader(file));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        try {
            while((line=br.readLine())!=null){
                sb.append(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        String bauschDataJson02 = sb.toString();


        // 數(shù)據(jù) - 3

        file = new File(fileName03);
        sb = new StringBuffer();
        try {
            br=new BufferedReader(new FileReader(file));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        try {
            while((line=br.readLine())!=null){
                sb.append(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        String bauschDataJson03 = sb.toString();
回答
編輯回答
大濕胸

問題一:
從文件中讀取數(shù)據(jù)的代碼可以封裝為一個單獨的方法,例如:

public static String readFileAsString(String filePath) throws IOException {
    return readFileAsString(new File(filePath));
}

public static String readFileAsString(File file) throws IOException {
    try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
        StringBuilder content = new StringBuilder();

        for (String line; (line = reader.readLine()) != null;) {
            content.append(line);
        }

        return content.toString();
    }
}

如果使用 Java8,readFileAsString 方法會更簡單:

public static String readFileAsString(File file) throws IOException {
    return Files.lines(file.toPath()).collect(Collectors.joining(""));
}

這樣的話,你就不需要每次讀取某個文件的時候,都寫一堆邏輯同樣的代碼,而是直接調(diào)用 readFileAsString 方法就行。

問題二:
Java 遍歷某個目錄的 API 很多,如果只是非遞歸遍歷,即只列出當前目錄的文件,可以使用:

  1. File 類的 listFiles 方法
  2. Files 類的 list 方法,返回 Stream<Path>,從而可以使用 Lambda 表達式。
2017年4月6日 13:19
編輯回答
默念
File root  = new File(App.class.getClassLoader().getResource("bauschData/").getPath());
Arrays
    .stream(Objects.requireNonNull(root.listFiles( )))
    .filter(file -> file.getName().endsWith("json"))
    .map(File::toPath)
    .forEach(path -> {
        try {
            List<String> lines = Files.readAllLines(path);
        } catch (IOException e) {
            e.printStackTrace( );
        }
});

你要算一下所有文件的大小你內(nèi)存放得下不,如果放不下那最好改成 Scanner 逐行掃描的方式去讀。

2018年7月3日 13:10
編輯回答
陌如玉
File root  = new File(App.class.getClassLoader().getResource("bauschData/").getPath());
Arrays
    .stream(Objects.requireNonNull(root.listFiles( )))
    .filter(file -> file.getName().endsWith("json"))
    .map(File::toPath)
    .forEach(path -> {
        try {
            List<String> lines = Files.readAllLines(path);
        } catch (IOException e) {
            e.printStackTrace( );
        }
});

你要算一下所有文件的大小你內(nèi)存放得下不,如果放不下那最好改成 Scanner 逐行掃描的方式去讀。

—————————————————————————————————
—————————————————————————————————
—————————————————————————————————

問題一:
從文件中讀取數(shù)據(jù)的代碼可以封裝為一個單獨的方法,例如:

public static String readFileAsString(String filePath) throws IOException {
    return readFileAsString(new File(filePath));
}

public static String readFileAsString(File file) throws IOException {
    try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
        StringBuilder content = new StringBuilder();

        for (String line; (line = reader.readLine()) != null;) {
            content.append(line);
        }

        return content.toString();
    }
}

如果使用 Java,readFileAsString 方法會更簡單:

public static String readFileAsString(File file) throws IOException {
    return Files.lines(file.toPath()).collect(Collectors.joining(""));
}

這樣的話,你就不需要每次讀取某個文件的時候,都寫一堆邏輯同樣的代碼,而是直接調(diào)用 readFileAsString 方法就行。

問題二:
Java 遍歷某個目錄的 API 很多,如果只是非遞歸遍歷,即只列出當前目錄的文件,可以使用:

  1. File 類的 listFiles 方法
  2. Files 類的 list 方法,返回 Stream<Path>,從而可以使用 Lambda 表達式。
2017年2月2日 08:13