目录列表不刷新

发布于 2024-08-26 22:14:43 字数 3072 浏览 6 评论 0原文

这让我发疯!我有一个面板,显示目录中的文件列表。该列表存储在向量中。当我单击按钮时,会在同一目录中创建一个新文件,并且需要刷新列表。

我不明白为什么Java看不到新文件,即使我在Dos中添加一个好的旧DIR,Dos也可以看到该文件。就好像新文件是不可见的,尽管我可以看到它并且 Dos 可以看到它。我尝试给它一些时间(睡眠,屈服),但没有用。我还尝试复制到新的临时文件并读取临时文件,但再次无济于事。这是一些代码(删除了一些不相关的行):

public class Button extends EncapsulatedButton {

 public Button()
 {
  super("button pressed");
 }

 public void actionPerformed(ActionEvent arg0) {

//removed function here where the new file is created in the directory
//remove call to DOS that regenerates /myFileList.txt after a new file was added in the directory
//at this point, DOS can see the new file and myFileList.txt is updated, however it is read by java without the update!!!!!

//now trying to read the directory after the new file was created  

    Vector data = new Vector<String>();
    String s = null;

// Create the readers to read the file.

  try {
   File f = new File("/myFileList.txt");
   BufferedReader stream = new BufferedReader(new InputStreamReader(new FileInputStream(f)));

  while((s = stream.readLine()) != null)
  {
    data.addElement(s.trim());
  }
  stream.close();

  } catch (IOException e) {
   e.printStackTrace();
  } 

  util();

 }

 void util(){
//giving it time is not helping
  Thread.yield();
  try {
   Thread.sleep(10000);
  } catch (InterruptedException e1) {
   e1.printStackTrace();
  }
  //get the file listing through java instead of DOS - still invisible
  File fLocation = new File("/myDir");
     File[] filesFound = fLocation.listFiles();

     for (int i = 0; i < filesFound.length; i++) {
       if (filesFound[i].isFile()) {
         System.out.println("**********" + filesFound[i].getName());
       }
     }

//last resort: copy to a temp then read from there - still not good
   try{
     //copy to a temp file
      File inputFile = new File("/myFileList.txt");
       File outputFile = new File("/myFileList_temp.txt");

       FileReader in = new FileReader(inputFile);
       FileWriter out = new FileWriter(outputFile);
       int c;

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

       in.close();
       out.close();

     //read the copy to see if it is updated
       // Open the file that is the first 
       // command line parameter
       FileInputStream fstream = new FileInputStream("/myFileList_temp.txt");
       // Get the object of DataInputStream
       DataInputStream in1 = new DataInputStream(fstream);
       BufferedReader br = new BufferedReader(new InputStreamReader(in1));
       String strLine;
       //Read File Line By Line
       while ((strLine = br.readLine()) != null)   {
         // Print the content on the console
         System.out.println ("Test file read: " + strLine);
       }
       //Close the input stream
       in1.close();
       }catch (Exception e){//Catch exception if any
         System.err.println("Error: " + e.getMessage());
       }
 }

}

我将不胜感激任何线索。谢谢。

myFileList.txt 是这样的:

myline1
myline2
myline3

在文件夹中添加新文件后,

myline4 应该出现在其中,然后它将被读取并显示在面板中。

This is driving me crazy! I have a panel that displays a list of files from a directory. The list is stored in a vector. When I click on a button, a new file is created in the same directory and the list needs to be refreshed.

I don't understand why Java cannot see the new file, even though if I add a good old DIR in Dos, Dos can see the file. It's as if the new file is invisible even though I can see it and Dos can see it. I tried giving it some time (sleep, yield) but it's no use. I also tried copying to a new temp file and reading the temp but again to no avail. Here's some code (removed some irrelevant lines):

public class Button extends EncapsulatedButton {

 public Button()
 {
  super("button pressed");
 }

 public void actionPerformed(ActionEvent arg0) {

//removed function here where the new file is created in the directory
//remove call to DOS that regenerates /myFileList.txt after a new file was added in the directory
//at this point, DOS can see the new file and myFileList.txt is updated, however it is read by java without the update!!!!!

//now trying to read the directory after the new file was created  

    Vector data = new Vector<String>();
    String s = null;

// Create the readers to read the file.

  try {
   File f = new File("/myFileList.txt");
   BufferedReader stream = new BufferedReader(new InputStreamReader(new FileInputStream(f)));

  while((s = stream.readLine()) != null)
  {
    data.addElement(s.trim());
  }
  stream.close();

  } catch (IOException e) {
   e.printStackTrace();
  } 

  util();

 }

 void util(){
//giving it time is not helping
  Thread.yield();
  try {
   Thread.sleep(10000);
  } catch (InterruptedException e1) {
   e1.printStackTrace();
  }
  //get the file listing through java instead of DOS - still invisible
  File fLocation = new File("/myDir");
     File[] filesFound = fLocation.listFiles();

     for (int i = 0; i < filesFound.length; i++) {
       if (filesFound[i].isFile()) {
         System.out.println("**********" + filesFound[i].getName());
       }
     }

//last resort: copy to a temp then read from there - still not good
   try{
     //copy to a temp file
      File inputFile = new File("/myFileList.txt");
       File outputFile = new File("/myFileList_temp.txt");

       FileReader in = new FileReader(inputFile);
       FileWriter out = new FileWriter(outputFile);
       int c;

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

       in.close();
       out.close();

     //read the copy to see if it is updated
       // Open the file that is the first 
       // command line parameter
       FileInputStream fstream = new FileInputStream("/myFileList_temp.txt");
       // Get the object of DataInputStream
       DataInputStream in1 = new DataInputStream(fstream);
       BufferedReader br = new BufferedReader(new InputStreamReader(in1));
       String strLine;
       //Read File Line By Line
       while ((strLine = br.readLine()) != null)   {
         // Print the content on the console
         System.out.println ("Test file read: " + strLine);
       }
       //Close the input stream
       in1.close();
       }catch (Exception e){//Catch exception if any
         System.err.println("Error: " + e.getMessage());
       }
 }

}

I would appreciate any leads. Thank you.

myFileList.txt lokks like this:

myline1
myline2
myline3

After adding a new file in the folder,

myline4 should appear in it, then it will be read and displayed in the panel.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

[旋木] 2024-09-02 22:14:43

老实说,你的代码一团糟。

您从 /myFileList.txt 中读取内容,除了将其存储在临时 Vector 中之外,对所读取的内容不执行任何操作。最好的情况下,这不会产生任何影响;在最坏的情况下(例如,如果文件不存在)它会抛出异常。无论它做什么,它都不会创建新文件。

此外,我在 GUI 中没有看到任何显示文件列表的面板。您预计它会如何更新?

Honestly, your code is a mess.

You read from /myFileList.txt and do nothing with what you read, except store it in a temporary Vector. At best, this has no effect; at worst (if the file doesn't exist, for example) it throws an exception. Whatever it does, it does not create a new file.

Furthermore, I see no reference to the panel in your GUI that supposedly displays the file list. How do you expect it to get updated?

一杆小烟枪 2024-09-02 22:14:43

这对我有用:
要刷新目录列表,请再次调用 .listFiles()。

filesFound = fLocation.listFiles();
应显示最新的目录列表。希望这对您有帮助。

This works for me:
To refresh the directory list, call .listFiles() again.

filesFound = fLocation.listFiles();
should show the most updated directory listing. Hope this helps you.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文