Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Работа с сетью > копируем файлы в папку


Автор: snorkee 10.4.2005, 19:36
Вопрос вот в чём - у меня есть массив File[] MainFiles который хранит список всех файлов, папок и т.д.
в некоторой директории. У меня есть GUI который например выводит для меня информацию о том сколько у меня там mp3 файлов,
сколько avi и т.д. Я хочу, чтоб когда я поставлю галочку в checkbox сMp3 и нажму кнопку Copy у меня создалась директория
Mp3 и в ней записались все mp3 файлы.
вот код...


Код



else if(cMp3.isSelected()==true){ //проверка - нажат ли checkbox
         
int index=1;
File dirMp3 = new File("E:\\ForProject\\Mp3\\");  // cоздаём директорию
dirMp3.mkdir();


while(indexes[2][index]!=0){          // это массив у меня хранит целочисленные значения, те индексы массива всех файлов mainFiles в которых элементы являются mp3 файлами
    
try {
copy(mainFiles[indexes[2][index]],dirMp3); // здесь я вызываю функцию copy, задаю ей mp3 файл и File (директорию, куда хочу скопироватьэтот файл)
} catch (IOException e1) {
e1.printStackTrace();
}
inde++;
}
}



    public static void copy(File source, File dest) throws IOException {
         FileChannel in = null, out = null;
         try {          
              in = new FileInputStream(source).getChannel();
              out = new FileOutputStream(dest).getChannel();

              long size = in.size();
              MappedByteBuffer buf = in.map(FileChannel.MapMode.READ_ONLY, 0, size);

              out.write(buf);

         } finally {
              if (in != null)          
               in.close();
              if (out != null)     
               out.close();
         }
    }







результат у меня получается не тот...при таком раскладе просто создаётся папка Mp3 и всё. если я не вызываю функцию mkdir(),
то получается просто файл c именем Mp3 без расширения в который как я понимаю записывается содержание моего последнего *.mp3
файла.

Автор: Domestic Cat 10.4.2005, 22:20
Ты копируешь вызовом
Код

copy(mainFiles[indexes[2][index]],dirMp3)

но dirMp3 должен быть файлом, а не директорией.

Добавлено @ 22:21
М
 
Большая просьба: задавйте вопросы в соответствующем форум, не валите все в Общие вопросы. Не волнуйтесь, в любом форуме вероятность получить ответ одинакова.

Автор: snorkee 10.4.2005, 23:04
я не очень понял твою мысль но придумал уже другой вариант

Автор: batigoal 11.4.2005, 10:58
Я делал для вложенного копирования такой метод:
Код

private void cascadeCopy(File f, File outputFile)
    {
        if(!f.isDirectory()) copyFile(f, outputFile);
        else
        {
            outputFile.mkdir();
            File[] filesInDir = f.listFiles();
            for(int i=0; i<filesInDir.length; i++)
            {
                cascadeCopy(filesInDir[i], new File(outputFile+"\\"+filesInDir[i].getName()));
            }
        }
    }
private void copyFile(File inFile, File outFile)
    {
        try
        {
            FileReader in = new FileReader(inFile);
            FileWriter out = new FileWriter(outFile);
            int c;

            while ((c = in.read()) != -1) out.write(c);

            in.close();
            out.close();
        }
        catch(Exception e)
        {
            MainFrame.logger.severe("Error copying file "+inFile.getPath()+" to file "+outFile.getPath()+"!");
        }
    }



Автор: jer1 11.4.2005, 12:02
Код

  new File(outputFile+"\\"+filesInDir[i].getName()))


лучше вместо "\\", использовать "/" - так короче (для windows система сама поставит как надо)


Автор: batigoal 11.4.2005, 12:32
Спасибо, учту.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)