Как загрузить несколько файлов с помощью приложений Swings? - PullRequest
0 голосов
/ 15 июля 2010

Я пытаюсь загрузить несколько файлов в приложениях Swing. Я объявил массив для хранения значений выбранных файлов, но когда я нажимаю кнопку загрузки, загружается только 1 файл.Как я могу загрузить все выбранные файлы в базу данных?

Код для открытия и загрузки файла: ....

 public void openFile() 
 {
      JFileChooser jfc = new JFileChooser();
      jfc.setMultiSelectionEnabled(true);// added line
      int result = jfc.showOpenDialog(this);
      if(result == JFileChooser.CANCEL_OPTION) return;
      try {
            ArrayList<String> FileData = new ArrayList<String>();
            File[] file = jfc.getSelectedFiles();
            String s=""; int c=0;
            for(int i=0;i<file.length;i++) //added
            {  
              jep.setText(file[i].toString()); // added
            }
            return FileData;
          } 
          catch (Exception e) 
          {
             JOptionPane.showMessageDialog(this,e.getMessage(),
            "File error",JOptionPane.ERROR_MESSAGE);
          }
   }

Ответы [ 2 ]

0 голосов
/ 15 июля 2010

Вы не четко определили, что вы на самом деле подразумеваете под «загрузить несколько файлов». Я предполагаю, что вы хотите загрузить содержимое нескольких текстовых файлов один за другим в один JEditorPane. Если это так, ответ Ромена покажет вам пример загрузки одного файла. Тем не менее, ваш код на самом деле выполняет цикл по массиву File объектов и устанавливает их path (это то, что toString возвращает на File) в качестве текста на панели редактора. Каждый из них переопределяет последний, поэтому вы получаете единственный путь к файлу. Я мог бы также предложить, когда вы открываете JFileChooser, вы ограничиваете файлы, которые пользователь может выбрать определенными типами файлов (например, txt, html).

0 голосов
/ 15 июля 2010
    // get list of selected files
    File[] file = jfc.getSelectedFiles();
    String s=""; int c=0;
    for(int i=0;i<file.length;i++) //added
    {  
      // The toString will just return you back the path of the file object times the number of bytes in the file.
      jep.setText(file[i].toString()); // added
    }
    return FileData;

Этот код не будет работать.Если вы хотите, чтобы метод считывал файл с заданным именем в массив строк, вам потребуется:

   /**
    * Read entire contents of a text file.
    *
    * @param fileName Text file name
    * @return ArrayList of String (line) elements
    * @throws FileNotFoundException
    * @throws IOException
    */
   public static ArrayList readTextFile( String fileName )
      throws FileNotFoundException, IOException
   {
      ArrayList lines = new ArrayList();
      BufferedReader in = null;
      try
      {
         in = new BufferedReader( new FileReader( fileName ));
         String line;
         while ( ( line = in.readLine()) != null )
         {
            lines.add( line );
         }
      }
      finally
      {
         if ( in != null )
         {
            try
            {
               in.close();
            }
            catch ( IOException ex )
            {
            }
         }
      }
      return lines;
   }

Поскольку вы хотите прочитать содержимое нескольких файлов, просто сделайте это в циклеи делать каждый в отдельности.Если вы загрузите все это в память, у вас могут возникнуть проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...