importjava.io.BufferedReader;importjava.io.File;importjava.io.FileInputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.util.ArrayList;importjava.util.List;importorg.apache.poi.hssf.usermodel.HSSFWorkbook;importorg.apache.poi.ss.usermodel.Cell;importorg.apache.poi.ss.usermodel.CellType;importorg.apache.poi.ss.usermodel.Row;importorg.apache.poi.ss.usermodel.Sheet;importorg.apache.poi.ss.usermodel.Workbook;importentity.Bus;public classDao{public List readExcelList() throwsIOException {/*** 读取表格
* 输出至前端*/List list = new ArrayList<>();
String filePath="D://dns.xls";
InputStream input= newFileInputStream(filePath);
Workbook wb= null;
wb= newHSSFWorkbook(input);//得到一个工作表对象;
Sheet sheet = wb.getSheetAt(0);int rsRows = sheet.getLastRowNum();//获取sheet表中的总行数//遍历行//每一行成一个bus对象
Bus bus=null;for (int i=0;i<=rsRows;i++) {
Row row=sheet.getRow(i);int id=0;
String name=null;//遍历行单元格,已知有两列;第一列int型id,第二列String型name
Cell cell1 = row.getCell(0);
Cell cell2= row.getCell(1);//一定要检验是否为空
if(cell1==null||cell1.equals(null)||cell1.getCellType()==CellType.BLANK){break;
}else{//数值型
id=(int) cell1.getNumericCellValue();
}if(cell2==null||cell2.equals(null)||cell2.getCellType()==CellType.BLANK){break;
}else{//字符串型
name=cell2.getStringCellValue();
}
bus=newBus(id,name);
list.add(bus);
}
wb.close();//关闭
returnlist;
}public static ListreadTxtFile(String filePath) {/*** 读取文档
*@paramfilePath
*@return
*/List list = new ArrayList();try{
String encoding= "UTF-8";
File file= newFile(filePath);if (file.isFile() &&file.exists()) {
InputStreamReader read= newInputStreamReader(newFileInputStream(file), encoding);
BufferedReader bufferedReader= newBufferedReader(read);
String lineTxt= null;while ((lineTxt = bufferedReader.readLine()) != null) {if (!lineTxt.startsWith("#"))
list.add(lineTxt);
}
read.close();
}else{
System.out.println("找不到文件");
}
}catch(Exception e) {
System.out.println("出错了");
e.printStackTrace();
}returnlist;
}public staticString[][] createArray(String filePath){/*** 读取文档生成二维数组
*@paramfilePath
*@return
*/List list =readTxtFile(filePath);
System.out.println("读取成功");
String[][] array= newString[list.size()][];for(int i=0;i
array[i]= newString[list.size()];
String linetxt=list.get(i);
String[] myArray= linetxt.replaceAll("\\s+", "@").split("@");for(int j=0;j
array[i][j]=myArray[j];
}
}returnarray;
}public static int[][] str2int(String[][] str){//String型转为int型
inta,b;
a=str.length;
b= str[0].length;int result[][] = new int[a][b];for(int i = 0 ; i < a ; ++i)for(int j = 0 ; j < b ; ++j) {
result[i][j]=Integer.parseInt(str[i][j]);
}returnresult;
}public static List dijkstra(int vs,int vf) throwsIOException {/*** Dijkstra最短路径。
* 即图中"节点vs"到其它各个节点的最短路径。
*@paramvs 起始节点
*@paramGraph 图
* 将最短路径上的顶点,距离存入泛型集合list,返回
* 注意整型用Integer不能用int*/List list= new ArrayList();//将最短路径上的顶点,距离存入list,返回
String[][] str= createArray("D:\\text.txt");//将读取的String型二维数组转化为int型
int[][]Graph =str2int(str);int NUM = Graph[0].length;int[] prenode = new int[NUM];//前驱节点数组
int[] path = new int[NUM];//最短距离数组
boolean[] flag = new boolean[NUM];//该节点是否已经找到最短路径
int vnear = 0;//距离vs最近的节点//初始化
for (int i = 0; i
prenode[i]=i;
path[i]= Graph[vs][i];//顶点i的最短路径为顶点vs到i的权
flag[i] = false;
}
flag[vs]= true;//vs自身初始化//遍历 Graph.length-1次,找出每个顶点的最短路径
for (int v = 1; v < Graph.length; v++) {//每次循环求得当前距离vs最近的顶点vnear和最短距离min
int min = 100000;//100000表示无穷
for (int j = 0; j < Graph.length; j++) {if (!flag[j] && path[j]
min=path[j];
vnear=j;
}
}//标记顶点vnear为已经获取到最短路径
flag[vnear] = true;//根据vnear更新vs到其他所有节点的前驱节点和最短路径
for (int k = 0; k < Graph.length; k++) {if (!flag[k] && (min + Graph[vnear][k])
prenode[k]=vnear;
path[k]= min +Graph[vnear][k];
}
}
}
list.add(path[vf]+"");//+""作用是将int转化为String型//依次保存前驱
for(int i=0;i<4&&prenode[vf]!=vs;i++) {//i范围根据自己表的情况
list.add(getNamebyid(vf));
vf=prenode[vf];
}
list.add(getNamebyid(vs));returnlist;
}public int getIdbyname(String name)throwsIOException {//通过name获得id
int x=-1;
String filePath="D://dns.xls";
InputStream input= newFileInputStream(filePath);
Workbook wb= null;
wb= newHSSFWorkbook(input);//得到一个工作表对象;
Sheet sheet = wb.getSheetAt(0);int rsRows = sheet.getLastRowNum();//获取sheet表中的总行数//遍历行
for (int i=0;i<=rsRows;i++) {
Row row=sheet.getRow(i);int id=0;
String flag=null;//遍历行单元格,已知有两列;第一列int型id,第二列String型name
Cell cell1 = row.getCell(0);
Cell cell2= row.getCell(1);if(cell1==null||cell1.equals(null)||cell1.getCellType()==CellType.BLANK){break;
}else{//数值型
id=(int) cell1.getNumericCellValue();
};if(cell2==null||cell2.equals(null)||cell2.getCellType()==CellType.BLANK){break;
}else{//字符串型
flag=cell2.getStringCellValue();
};
String a=newString(flag);
String b=newString(name);if(a.equals(b)){
x=id;
};
}
wb.close();//记得关闭
returnx;
}public static String getNamebyid(int id) throwsIOException {//通过id获得name
String str=null;
String filePath="D://dns.xls";
InputStream input= newFileInputStream(filePath);
Workbook wb= null;
wb= newHSSFWorkbook(input);//得到一个工作表对象;
Sheet sheet = wb.getSheetAt(0);int rsRows = sheet.getLastRowNum();//获取sheet表中的总行数//遍历行
for (int i=0;i<=rsRows;i++) {int flag=0;
String name=null;
Row row=sheet.getRow(i);//遍历行单元格
Cell cell1= row.getCell(0);
Cell cell2= row.getCell(1);if(cell1==null||cell1.equals(null)||cell1.getCellType()==CellType.BLANK){break;
}else{//数值型
flag=(int) cell1.getNumericCellValue();
}if(cell2==null||cell2.equals(null)||cell2.getCellType()==CellType.BLANK){break;
}else{//字符串型
name=cell2.getStringCellValue();
}if(flag==id){
str=name;
}
}
wb.close();//记得关闭
returnstr;
}
}