30/09/2018, 19:11
Lỗi lệnh xóa file,thư mục trong java
em viết một đoạn code quản lí file trong ổ cứng dùng lệnh. khi nhập lệnh xóa file,folder thì bị ném ra lỗi, mà em chưa biết sai chỗ nào, ae giúp em với. thank ae!
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import static java.lang.Thread.sleep;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.Scanner;
/**
*
* @author Minh Ngoc
*/
public class File_demo {
public static void main(String[] args) throws IOException {
try{
Scanner in= new Scanner(System.in);
System.out.println("Nhập vào đường dẫn cần quản lí:");
System.out.println("admin:> ");
String s1=in.nextLine();
System.out.println("admin:> "+ s1+">");
File file= new File(s1);
// inner;
String s= in.nextLine();
System.out.println("admin:> " +s1+">");
switch(s){
case "showdir":
File[] listFile=file.listFiles();
for(int i=0;i<=listFile.length;i++){
if(listFile[i].isDirectory()||listFile[i].isFile()){
System.out.println(i+"."+listFile[i].getName());
}
}
//System.out.println();
case "makefile":
System.out.println(" Nhập vào tên file:");
String s3= in.nextLine();
File fileNew=new File(s1,s3);
fileNew.createNewFile();
FileWriter fw= new FileWriter(fileNew);
BufferedWriter bw = new BufferedWriter(fw);
System.out.println(" Nhập vào dữ liệu:");
String str= in.nextLine();
bw.write(str);
bw.close();
fw.close();
System.out.println("
make file succesful!!!");
System.out.println("Location: " + s1 +s3);break;
case"makedir":
System.out.println("Nhập tên thư mục cần tạo:");
String dirNew=in.nextLine();
String s4= s1+dirNew;
File dir= new File(s4);
dir.mkdir();
System.out.println("Tạo thư mục thành công!!!!");
;break;
case "delete":
File fd= new File(s1);
File[] listfd= fd.listFiles();
for(int j=0;j<=listfd.length;j++){
if(listfd[j].isDirectory()||listfd[j].isFile()){
System.out.println(j + "."+listfd[j].getName());
}
}
System.out.println("Nhập vào số thứ tự của file hoặc thư mục cần xóa:");
int c=in.nextInt();
listfd[c].delete();
System.out.println("Xóa thành công!!!");break;
case"exit":return;
default:
System.out.println("input error!!!");break;
}
}
catch(Exception error){
System.out.println("Error:"+error);
}
}
}
Đoạn code lỗi:
System.out.println("Nhập vào số thứ tự của file hoặc thư mục cần xóa:");
int c=in.nextInt();
listfd[c].delete();
System.out.println("Xóa thành công!!!");break;
Bài liên quan
Lỗi này là do bạn truy suất phần tử ngoài chuỗi rồi (listfd size 20 mà c thì là 20 nên lỗi (max index là 19)). Bạn phải kiểm tra biến c trước khi truy cập các phần tử trong chuỗi nhé.
mình chưa hiểu lắm, biến c là mình nhập từ bàn phím mà bạn nên mình có thể cho nhỏ hơn 20!
à cho mình hỏi, đoạn code này sẽ đưa các file, thư mục có trong thư mục đó vào trong một chuỗi đúng không:
File[] listfd= fd.listFiles();
Đúng rồi bạn, trong cái lỗi của bạn thì cái listfd có 20 file ở trong đó (index từ 0…19) nhưng bạn nhập c = 20 nên nó bị lỗi
mình chưa nhập c bạn ơi. mà mình thấy lỗi oy, do mình chạy vòng lặp for hơn số phần tử được nạp vào chuỗi. thank you!
nhờ các anh mà em vừa đc thông não.em xin chân thành cảm ơn