Проблема с удалением и переименованием более одного файла в каталоге - PullRequest
1 голос
/ 26 декабря 2011

У меня есть проблема с удалением и переименованием более одного файла в каталоге с использованием сервлета. При запуске приведенного ниже кода иногда некоторые файлы удаляются, другие нет. Ниже приведен код сервлета, который я использую.

RootSipResource.java file

public void updateRootFile(String directorypath, String appID, String[] appName) throws IOException {
        FileInputStream fins=null;
        try {
                  File[] listOfFiles = fileLists(directorypath);
            for (int i = 0; i < listOfFiles.length; i++) { 
                synchronized(listOfFiles) { 
                            if (listOfFiles[i].isFile()) {                                      
                    rootFiles = listOfFiles[i].getName();                                           
                    if (rootFiles.endsWith(".properties") || rootFiles.endsWith(".PROPERTIES")) {
                        fins = new FileInputStream(directorypath + rootFiles);
                        properties.load(new InputStreamReader(fins, Charset.forName("UTF-8")));
                        String getAppName = properties.getProperty("root.label." + appID);
                        String propertyStr = "root.label." + appID;                                         
                                             String toUtf =new String(appName[i].getBytes("iso-8859-1"), "UTF-8")  ;
                         saveFile(fins, getAppName, directorypath + rootFiles, propertyStr,toUtf);
                    }                            

                }
                       }

            }

        } catch (Exception e) {
            System.out.println("Exception Inside updateRootFile():: " + e);
        }
    }

    public  void saveFile(FileInputStream fIns, String oldAppName, String filePath, String propertyStr, String appName)
            throws IOException {
        FileInputStream  finStream =null;
        try {                        
                     String oldChar = propertyStr + "=" + oldAppName;
             String newChar = propertyStr + "=" + appName;
             String strLine;
            File rootFile = new File(filePath);
            File copyFile = new File("D:\\root\\root_created.properties");

                    finStream = new FileInputStream(rootFile);
                    BufferedReader br = new BufferedReader(new InputStreamReader(finStream, "UTF-8"));
                OutputStreamWriter outStream = new OutputStreamWriter(new FileOutputStream(copyFile), "UTF-8");
            while ((strLine = br.readLine()) != null) {
                strLine = strLine.replace(oldChar, newChar);
                outStream.write(strLine);
                outStream.write("\r\n");
            }
            outStream.flush();
            outStream.close();
            br.close();
            fIns.close();
                    finStream.close();                        
                rootFile.delete();
            copyFile.renameTo(rootFile);               

        } catch (IOException e) {
            System.out.println(" Excpetion in save file--*******************---" + e);
        }
    } 

Я использовал ключевое слово synchorinized внутри метода updateRootFile () ... Но все равно оно не работает ..

1 Ответ

0 голосов
/ 26 декабря 2011

Этот код ведет себя неправильно при выполнении в среде, где много запросов выдается одновременно, или он даже не работает, когда вы запускаете этот метод в одном потоке?Пробовал отлаживать его?

В любом случае ваша «синхронизированная» конструкция здесь просто неактуальна, потому что ваш «listOfFiles» - это переменная, определенная локально внутри метода, а не поля.Если ничего не значит быть частью сервлета, а использовать механизм синхронизации не по назначению.

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