Java 递归目录扫描后放入映射
我正在尝试编写一个工具,它可以将更新的文件复制到文件夹结构中。此文件夹结构分为“实例”,因此根文件夹显示以下内容:Java 递归目录扫描后放入映射,java,for-loop,dictionary,recursion,Java,For Loop,Dictionary,Recursion,我正在尝试编写一个工具,它可以将更新的文件复制到文件夹结构中。此文件夹结构分为“实例”,因此根文件夹显示以下内容: Test1[目录] Test2[目录] Test3[目录] 在这些目录中,还有更多的目录,当然还有文件。由于我想更新这些文件夹中的一些文件(更新的文件位于我的工具可以访问的另一个文件夹中),所以我搜索整个结构。更新后的文件名与旧文件名相同,分别位于Test1、Test2和Test3的子文件夹中 我查找了一个递归方法来遍历这些文件夹并进行搜索。当我的工具在同一个实例中找到第二个文
- Test1[目录]
- Test2[目录]
- Test3[目录]
public class Main {
public static void main(String[] args) throws SAXException, JAXBException {
XMLHandler xmlhandler = new XMLHandler();
InstanceManager manager = new InstanceManager();
PatchFileManager patchManager = new PatchFileManager(xmlhandler.getUpdateFolder());
patchManager.scanDirectoryForPatches();
ArrayList<PatchFile> patchFilesname = patchManager.getPatchFiles();
manager.setPathnameToScan(xmlhandler.getTargetFolder());
manager.scanDirectoryForInstances(manager.getPathnameToScan());
PatchManager ptchmngr = new PatchManager();
outerloop:
for (PatchFile f : patchFilesname) {
for (Instance e : manager.getInstances()) {
ptchmngr.scanInstallationForPatchFile(e.getPathname(), f);
if(ptchmngr.getPatchSearchTempChecker().size()>1){
System.out.println("loop stopped");
break outerloop;
}
}
}
....
}
}
公共类主{
公共静态void main(字符串[]args)抛出SAXException、JAXBEException{
XMLHandler=新的XMLHandler();
InstanceManager=new InstanceManager();
PatchFileManager patchManager=新的PatchFileManager(xmlhandler.getUpdateFolder());
patchManager.scanDirectoryForPatches();
ArrayList patchFilesname=patchManager.getPatchFiles();
setPathnameToScan(xmlhandler.getTargetFolder());
scandDirectoryForInstances(manager.getPathnameToScan());
PatchManager ptchmngr=新的PatchManager();
外部环路:
for(PatchFile f:patchFilesname){
例如(实例e:manager.getInstances()){
ptchmngr.scanstallationforpatchfile(e.getPathname(),f);
如果(ptchmngr.getPatchSearchTempChecker().size()>1){
System.out.println(“循环停止”);
断开外环;
}
}
}
....
}
}
以及实际的类,在该类中扫描文件夹(不包括getter和setter)
公共类补丁管理器{
专用实例管理器安装管理器;
private ArrayList backUpList=新的ArrayList();
私人AspX管理员theAspxHandler;
private ArrayList patchFileList=new ArrayList();
私人日志管理器日志管理器;
私有ArrayList patchSearchTempChecker=新ArrayList();
private HashMap map=new HashMap();
公共无效复制修补程序(修补文件修补文件){
}
公共无效搜索文件(修补文件修补文件){
}
public void createBackUp(PatchFile PatchFile){
}
public void scanInstallationForPatchFile(字符串搜索开始,PatchFile PatchFile){
File filetoSearch=新文件(searchstart);
试一试{
if(filetoSearch.isDirectory()){
System.out.println(“搜索目录…”+filetoSearch.getAbsolutePath());
if(filetoSearch.canRead()){
对于(文件temp:filetoSearch.listFiles()){
如果(patchSearchTempChecker.size()>1){
抛出新的DoubleDefinitionException();
}
if(temp.isDirectory()&&!(temp.getName().equals(“图像”)){
扫描安装补丁文件(temp.getAbsolutePath(),补丁文件);
}否则{
if(patchfile.getFilename().toLowerCase().equals(temp.getName().toLowerCase())){
patchSearchTempChecker.add(temp.getAbsolutePath().toString());
System.out.println(patchSearchTempChecker.size());
}
}
}
}
}否则{
System.out.println(“拒绝许可”);
}
}抓住(
双重定义(例外)
{
System.out.println(“文件在实例中存在多次,请手动继续”);
}
}
//接球手和接球手
//...
//
}
那么问题出在哪里?也许我错过了,但你能强调一下吗?你想从一个目录中获取一批补丁并应用到另一个目录吗?听起来像是git的工作。尽管如此,我还是想通过Java编程。对我来说,歪曲版本控制软件似乎不是很聪明。
public class PatchManager {
private InstanceManager theInstanceManager;
private ArrayList<BackUp> backUpList = new ArrayList<BackUp>();
private ASPXManager theAspxHandler;
private ArrayList<PatchFile> patchFileList = new ArrayList<PatchFile>();
private LogManager theLogManager;
private ArrayList<String> patchSearchTempChecker = new ArrayList<String>();
private HashMap map = new HashMap();
public void copyPatch(PatchFile patchfile) {
}
public void searchFiles(PatchFile patchFile) {
}
public void createBackUp(PatchFile patchfile) {
}
public void scanInstallationForPatchFile(String searchstart, PatchFile patchfile) {
File filetoSearch = new File(searchstart);
try {
if (filetoSearch.isDirectory()) {
System.out.println("Searching directory..." + filetoSearch.getAbsolutePath());
if (filetoSearch.canRead()) {
for (File temp : filetoSearch.listFiles()) {
if (patchSearchTempChecker.size() > 1) {
throw new DoubleDefinitionException();
}
if (temp.isDirectory() && !(temp.getName().equals("Images"))) {
scanInstallationForPatchFile(temp.getAbsolutePath(), patchfile);
} else {
if (patchfile.getFilename().toLowerCase().equals(temp.getName().toLowerCase())) {
patchSearchTempChecker.add(temp.getAbsolutePath().toString());
System.out.println(patchSearchTempChecker.size());
}
}
}
}
} else {
System.out.println("Permission denied");
}
} catch (
DoubleDefinitionException ex)
{
System.out.println("File does exist multiple times within instance, proceed manually");
}
}
//Getters and Setters
//...
//
}