Avatar billede Bennysørensen Praktikant
06. november 2003 - 18:17 Der er 11 kommentarer og
1 løsning

Antal filer i mappe, deres størrelse m.m

Jeg skal løse en opgave:

"Lav et program FileInfo.java, der tager stien til en mappe som opstartsparameter, så man f.eks kan køre programmet med java FileInfo c\:oop\opgaver. Herefter skal du lave følgende:

a. Tæl og udskriv hvor mange filer der er i den angivne mappe (undermapper skal ikke tælles med)"

Nu undrer jeg mig over hvorfor jeg får

[Ljava.io.File;@3e86d0
IO

som svar. Den underlige konstruktion med de to stier skal findes i min manglende kreativitet mht opgavens formulering...

import java.util.*;
import java.io.*;

public class FileInfo
{
    String filNavn;
   
    public FileInfo(String fileName)
    {
        this.filNavn = fileName;
    }
    public static void main (String args[])
    {
        FileInfo fil = new FileInfo("E:/java/sampledir/sampledir/legeplads/IO/");
       
        File fil2 = new File("E:/java/sampledir/sampledir/legeplads/IO/");
       
        System.out.println(fil2.listFiles());
        System.out.println(fil2.getName());
    }
}
Avatar billede simonvalter Praktikant
06. november 2003 - 18:51 #1
public class FileInfo {

  public static void main(String[] args) {
 
    File dir = new File(args[0]);
    File[] files = dir.listFiles();

    System.out.println(files.length-1);
    for (int i = 0; i < files.length; i++) {
      System.out.println(files[i]);
    }
  }
}

skulle gøre det ..
Avatar billede Bennysørensen Praktikant
06. november 2003 - 19:08 #2
Det gør det ikke...jeg får en ArrayIndexOutOfBoundsException hvis jeg kører den fra Sun's Forte, og en NoClassDefFoundError når jeg kører det fra en CMD-promt.

Jeg er meget forundret over at jeg ikke kan få list() til at virke...alle de andre metoder, jeg har prøvet, såsom isDirectory(), isFile() getName(), length() etc virker....hvorfor så ikke lige list?
Avatar billede simonvalter Praktikant
06. november 2003 - 19:12 #3
så er det fordi du kører den forkert .. du skal selvfølgelig give et argument med feks

c:\mysql\bin\


i en commandpromt gør sådan her

java -cp . FileInfo c:\mysql\bin\

hvor . er hvis du står i samme mappe som Fileinfo.class filen

ellers skift . ud med stien til den.
Avatar billede simonvalter Praktikant
06. november 2003 - 19:18 #4
og hvis du vil bruge list så skal du bruge en String array og ikke et File
String[] files = dir.list();
Avatar billede Bennysørensen Praktikant
06. november 2003 - 19:19 #5
Well, det her br jo ikke handle om hvorvidt jeg kan finde ud af køre noget fra en kommandopromt (for det kan jeg sikkert ikke, selvom dit eksempel lige har givet mig en ny classdef...etc.)

Jeg er en ret umulig bruger af eksperten...jeg håber altid på at der er nogen, der kan løse mit problem på den måde jeg selv har angrebet det, eller forklare mig hvorfor min metode er forkert...så lærer jeg noget undervejs.

...kan du forklare mig hvad jeg har lavet af fejl, siden list() ikke virker?

Venligst
Avatar billede Bennysørensen Praktikant
06. november 2003 - 19:24 #6
"og hvis du vil bruge list så skal du bruge en String array og ikke et File
String[] files = dir.list();"

...det var lige hvad jeg havde brug for!
Jeg havde ikke fanget dét....tak!
Avatar billede simonvalter Praktikant
06. november 2003 - 19:26 #7
jeg kan da godt lave det om så det følger dit eksempel som du har grebet det an .. men din opgave siger at du skal tage en mappe som opstarts parameter .. og det gøre du igennem String[] args arrayet ...
så vil det først parameter være args[0]

hvis du hardcoder det så giver
FileInfo fil = new FileInfo("E:/java/sampledir/sampledir/legeplads/IO/");
jo ikke meget mening da
File fil2 = new File("E:/java/sampledir/sampledir/legeplads/IO/");
klarer det fint ...
Avatar billede simonvalter Praktikant
06. november 2003 - 19:28 #8
normalt kan man også sige til det program man koder i at det skal sende et argument med så man ikke behøver at gøre det i commandline.
Avatar billede Bennysørensen Praktikant
06. november 2003 - 19:31 #9
Hmmm...jeg sidder allerede fast igen...jeg kan ikke få list.length til at virke...og som jeg ser det laver du et array af strenge...problemet er at jeg senere skal tælle størrelsen af hver enkelt fil, og så lægge dem sammen (ikke noget stort problem). Jeg skal også kunne lægge et filter på, men dét er heller ikke noget stort problem...jeg har bare været i samme hjørne før (et array med navnene på filerne, ikke filerne selv), og dér gik der kludder i det hele.
Avatar billede Bennysørensen Praktikant
06. november 2003 - 19:32 #10
...jeg skal på arbejde nu, så der kommer ikke flere kommentarer fra mig idag. Tak for hjælpen...points'ne er givet.
Avatar billede simonvalter Praktikant
06. november 2003 - 19:34 #11
ok .. du kan tage og kigge her for inspiration, der er en masse eksempler med file

http://www.javaalmanac.com/cgi-bin/search/find.pl?words=file
Avatar billede simonvalter Praktikant
06. november 2003 - 19:35 #12
fejlen er sikkert at du ikke har sagt at file.lenght er en long
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester