Wpis z mikrobloga

Hej Miraski, mam tutaj taki kod w #java :

public class Rename {

public static void main(String[] args) {
// change file names in 'Directory':
String absolutePath = "C:\Users\4dm1n\Desktop\folder";
File dir = new File(absolutePath);
File[] filesInDir = dir.listFiles();
int i = 0;
for(File file:filesInDir) {
i++;
String name = file.getName();
String[] names = name.split("");
String partOne = "n=" + names[0];
String partTwo = names[2].substring(0, names[2].length() - 4);
String newName = partOne + "
BC" + names[1] + "" + partTwo + "PL.jpg";
String newPath = absolutePath + "\" + newName;
file.renameTo(new File(newPath));
System.out.println(name + " changed to " + newName);
}
} // close main()
} // close class

Program działa na tyle że pliki zmieniają nazwe a mimo to ArrayOutOfBounds..

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
n=n=n=n=n=n=n=n=n=n=n=n=myBCBCBCBCBCBCBCBCBCBCBCBCfile32.jpgIRL.jpgIRLIRL.jpgIRLIRIRL.jpg changed to n=n=n=n=n=n=n=n=n=n=n=n=n=myBCBCBCBCBCBCBCBCBCBCBCBCBCfile32.jpgIRL.jpgIRLIRL.jpgIRLIRIRL_IRL.jpg
at rename.Rename.main(Rename.java:23)

Linia 23: String partTwo = names[2].substring(0, names[2].length() - 4);

#programowanie #kiciochpyta #pytaniedoeksperta

Pzdr
  • 3
@sp33dlink: popracuj nad czystością kodu bo tego kodu się czytać ani zrozumieć nie da. Następnie wrzuć to na jakąś wklejke z formatowaniem. Stack trace wszystko ci mówi - wychodzisz poza zakres tablicy, więc zaznaczasz punkt i odpalasz debuger w miejscu,w którym program ci się #!$%@?. Tam zobaczysz jaką masz wielkość tablicy, wartości i index. A i zamiast konkatenować stringi poczytaj trochę o klasach StringBuilder, funkcji String.join albo String.format