import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
public class Solution {
public List<File> getDirList(File file){
File[] dir = file.listFiles();
List<File> dirList = new ArrayList<>();
for(File f: dir){
if(f.isDirectory()){
dirList.add(f);
}
}
return dirList;
}
public List<File> getFileList(File file){
File[] dir = file.listFiles();
List<File> fileList = new ArrayList<>();
for(File f: dir){
if(f.isFile()){
fileList.add(f);
}
}
return fileList;
}
public List<File> sortFileList(List<File> list){
List<File> resultList = new ArrayList<>();
Set<String> fileNameset = new TreeSet<>();
for(File f: list){
fileNameset.add(f.getName());
}
for(String s: fileNameset){
for(File f: list){
if(s.equals(f.getName())){
resultList.add(f);
}
}
}
return resultList;
}
public static void main(String[] args) throws Exception {
File path = new File(args[0]);//testDirectory
File resultFileAbsolutePath = new File(args[1]);
File res = new File(resultFileAbsolutePath.getParent()+"\\allFilesContent.txt");
if(FileUtils.isExist(res)){
FileUtils.deleteFile(res);
}
FileUtils.renameFile(resultFileAbsolutePath, res);
List<File> dirList = new ArrayList<>();
List<File> buffList = new ArrayList<>();
List<File> buffList2;
Solution sol = new Solution();
buffList = sol.getDirList(path);
dirList.add(path);
dirList.addAll(buffList);
while(true){
buffList2 = new ArrayList<>();
for(File f: buffList){
buffList2.addAll(sol.getDirList(f));
}
dirList.addAll(buffList2);
buffList = new ArrayList<>(buffList2);
if(buffList2.size()==0){
break;
}
}
List<File> fileLIst = new ArrayList<>();
for(File f: dirList){
fileLIst.addAll(sol.getFileList(f));
}
List<File> sortedFileList = sol.sortFileList(fileLIst);
FileInputStream fis;
FileOutputStream fos = new FileOutputStream(res);
boolean isFirst = true;
for(File file: sortedFileList){
File f = file;
if(f.length()<=50){
if(!isFirst){
fos.write("\r\n".getBytes());
}
fis = new FileInputStream(f);
//fos.write((f.getName()+" ").getBytes());//потом затереть
while(fis.available()>0){
fos.write(fis.read());
}
isFirst = false;
}
}
fos.close();
}
}Дмитрий
35 уровень
Не проходит про третьему пункту.
Архивный
Комментарии (9)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Ksenia VolkovaJava Developer в DXCMaster
6 января 2022, 18:11
После каждого тела файла записать "\n".
В качестве разделителя пути используй "/".
+1
Дмитрий
6 января 2022, 18:40
Разделителя какого пути?
Я на 7 винде сижу, у меня перенос строк работает только с "\n\r", а для пути "\\".
0
Дмитрий
6 января 2022, 18:46
с "\n" и "/" тоже не работает.
Возможно я не в том порядке пишу содержимое файлов. Возрастающий же это aa.txt > ab.txt > ba.txt ?
0
Ksenia VolkovaJava Developer в DXCMaster
6 января 2022, 18:47решение
Вот этого пути:
На винде будет работать и / как разделитель, и \n как перенос.
А у валидатора явно linux.
+2
Дмитрий
6 января 2022, 18:48
Не помогло.
0
Ksenia VolkovaJava Developer в DXCMaster
6 января 2022, 19:14решение
После каждого тела файла записать "\n". - не пробовал? (вместо "перед каждым кроме первого")
+2
Дмитрий
6 января 2022, 19:18
Попробовал только что, не помогло. И не писать переносы строк из самих файлов, а только в конце контента пробовал.
0
Ksenia VolkovaJava Developer в DXCMaster
6 января 2022, 20:06
Из самих файлов надо писать всё. Их содержимое вообще не должно тебя волновать (кроме размера).
И кстати, ты не закрываешь ни один FileInputStream.
Попробуй открывать поток на запись для resultFileAbsolutePath, а не res
0
Дмитрий
7 января 2022, 18:07
Неправильно создавался/удалялся/переименовывался файл + всегда после записи содержимого должен быть символ переноса строки. fis можно не закрывать. Вот, что вышло. Спасибо.
0