Bonjour,
J'utilise actuellement un bean qui charge une liste de fichier et les parse ensuite.
Cette liste doit être saisie en dur (Bean OutputManager). L'architecte n'a pas prévu qu'il y allait avoir plus de 30000 fichiers
J'ai ajouté un autre bean qui parcours récursivement un répertoire et liste tous les fichiers.
Mon probleme est que le bean original attend en entrée une liste de type Resource (toutes les classes créées pour le parsing de ces fichiers utilisent des méthodes de Resource, il serait donc assez long de tous modifier) et que je génère une liste de type File. Je ne vois pas comment convertir un type File en type Resource
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 <bean id="filesListingFactoryBean" class="com.datas.FilesListingFactoryBean"> <property name="parentDirectory" value="src/main/resources/com/xx/yy/yyy/ccc/output/"/> </bean> <bean id="outputManager" class="com.codec.OutputManager" init-method="readOutputFiles"> <property name="treeXmlParser" ref="treeXmlParser"></property> <property name="outputFileList" ref="filesListingFactoryBean"/> </bean>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 public class FilesListingFactoryBean implements FactoryBean, InitializingBean { private String parentDirectory; private List<File> file; public Object getObject() throws Exception { return file; } public Class<List> getObjectType() { return List.class; } public boolean isSingleton() { return false; } public void setParentDirectory(String parentDirectory) { this.parentDirectory = parentDirectory; } public void afterPropertiesSet() throws Exception { if (parentDirectory != null) { getFilesRec(file,parentDirectory); } } private void getFilesRec(List<File> allFiles, String root) { File f = new File(root); File[] listFiles = f.listFiles(); for (int i = 0; i < listFiles.length; i++) { if (listFiles[i].isDirectory()) { getFilesRec(allFiles, listFiles[i].toString()); }else if(listFiles[i].toString().endsWith("xml")){ allFiles.add(listFiles[i]); } } } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69 public class OutputManager { private List<Resource> outputFileList; private Map<String, TreeNode> outputMap; private TreeXmlParser treeXmlParser; public OutputManager() { outputFileList = new ArrayList<Resource>(); outputMap = new HashMap<String, TreeNode>(); } public void readOutputFiles() throws TechException { // parcours de la liste des fichiers for (Resource outputFile : outputFileList) { // extraction de l'id de la description = nom du fichier sans chemin // ni extension String outputId = null; String fileName = outputFile.getFilename(); int dotIndex = fileName.lastIndexOf('.'); if (dotIndex != -1) { outputId = fileName.substring(0, dotIndex); } // lecture de la description contenue dans le fichier TreeNode treeNode = treeXmlParser.parseResource(outputFile); // ajout dans la map outputMap.put(outputId, treeNode); } } public TreeNode getOutput(String OutputId) { return getOutput(outputId, true); } public TreeNode getOutput(String outputId, boolean clone) { TreeNode treeNode = outputMap.get(outputId); if(clone && treeNode != null) { treeNode = treeNode.clone(); } return treeNode; } public List<Resource> getOutputFileList() { return outputFileList; } public void setOutputFileList(List<Resource> outputFileList) { this.outputFileList = outputFileList; } public TreeXmlParser getTreeXmlParser() { return treeXmlParser; } public void setTreeXmlParser(TreeXmlParser treeXmlParser) { this.treeXmlParser = treeXmlParser; } }
Merci d'avance !
Partager