/* * Copyright (c) 2018-2028, DreamLu All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the dreamlu.net developer nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * Author: DreamLu 卢春梦 (596392912@qq.com) */ package org.springblade.core.auto.service; import java.io.*; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.util.Collection; import java.util.HashSet; import java.util.Set; /** * A helper class for reading and writing Services files. * * @author L.cm */ class ServicesFiles { private static final Charset UTF_8 = StandardCharsets.UTF_8; /** * Reads the set of service classes from a service file. * * @param input not {@code null}. Closed after use. * @return a not {@code null Set} of service class names. * @throws IOException */ static Set readServiceFile(InputStream input) throws IOException { HashSet serviceClasses = new HashSet<>(); try ( InputStreamReader isr = new InputStreamReader(input, UTF_8); BufferedReader r = new BufferedReader(isr) ) { String line; while ((line = r.readLine()) != null) { int commentStart = line.indexOf('#'); if (commentStart >= 0) { line = line.substring(0, commentStart); } line = line.trim(); if (!line.isEmpty()) { serviceClasses.add(line); } } return serviceClasses; } } /** * Writes the set of service class names to a service file. * * @param output not {@code null}. Not closed after use. * @param services a not {@code null Collection} of service class names. * @throws IOException */ static void writeServiceFile(Collection services, OutputStream output) throws IOException { BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(output, UTF_8)); for (String service : services) { writer.write(service); writer.newLine(); } writer.flush(); } }