0

UI からプロパティ ファイルの 2 つのフィールドを変更しています。すべて正常に動作していると思っていましたが、2 つのフィールドを変更して [送信] をクリックすると、ファイル全体がごちゃごちゃになっていて、上部のいくつかの行が欠落しているという問題がありました。私の実際のuserdata.propertiesファイル。

!**
! * Sahi - Web Automation and Test Tool
! * 
! * Copyright  2006  V Narayan Raman
! *
! * Licensed under the Apache License, Version 2.0 (the "License");
! * you may not use this file except in compliance with the License.
! * You may obtain a copy of the License at
! *
! *    http://www.apache.org/licenses/LICENSE-2.0
! *
! * Unless required by applicable law or agreed to in writing, software
! * distributed under the License is distributed on an "AS IS" BASIS,
! * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
! * See the License for the specific language governing permissions and
! * limitations under the License.
! **
# dirs. Relative paths are relative to userdata dir. Separate directories with semi-colon
scripts.dir=scripts;
# default log directory.
logs.dir=logs
# Directory where auto generated ssl cerificates are stored
certs.dir=certs

# Use external proxy server for http
ext.http.proxy.enable=true
ext.http.proxy.host=192.168.10.63
ext.http.proxy.port=8063
ext.http.proxy.auth.enable=false
ext.http.proxy.auth.name=kamlesh
ext.http.proxy.auth.password=password

# Use external proxy server for https
ext.https.proxy.enable=true
ext.https.proxy.host=
ext.https.proxy.port=
ext.https.proxy.auth.enable=false
ext.https.proxy.auth.name=kamlesh
ext.https.proxy.auth.password=password

# There is only one bypass list for both secure and insecure.
ext.http.both.proxy.bypass_hosts=localhost|127.0.0.1|*.internaldomain.com

しかし、proxy=192.168.10.73 と port=8073 を変更した後、これらの値は変更されますが、ファイルは次のようになります

#hostchanged
#Tue Jun 19 10:53:00 IST 2012
ext.https.proxy.auth.password=password
ext.http.proxy.host=192.168.10.73
ext.https.proxy.auth.name=kamlesh
ext.http.proxy.auth.password=password
ext.http.proxy.port=8073
ext.http.proxy.enable=true
certs.dir=certs
ext.http.proxy.auth.enable=false
ext.https.proxy.host=
ext.http.proxy.auth.name=kamlesh
scripts.dir=scripts;
logs.dir=logs
ext.https.proxy.auth.enable=false
ext.https.proxy.port=
ext.https.proxy.enable=true
ext.http.both.proxy.bypass_hosts=localhost|127.0.0.1|*.internaldomain.com

これは、この機能に使用しているコントローラー クラスですが、間違いを見つけることができません。これを修正するのを手伝ってください。

@Controller
public class MobeeProxyChangeController {

    private @Value("${filePath}")String fileDir;

    @RequestMapping("/proxy")
    public String ProxySettings(Model model) throws Exception {

        File f = new File(fileDir);

        Properties properties = new Properties();

        try {
            properties.load(new FileInputStream(f));

            String getHost = properties.getProperty("ext.http.proxy.host");
            String getPort = properties.getProperty("ext.http.proxy.port");

            model.addAttribute("proxyHost", getHost.trim());
            model.addAttribute("proxyPort", getPort.trim());
        } catch (Exception e) {
            e.printStackTrace();
        }

        return "proxyFile";

    }

    @RequestMapping("/saveProxy")
    public String SaveProxy(Model model, HttpServletRequest request,
            HttpServletResponse response) throws Exception {

        File f = new File(fileDir);
        Properties properties = new Properties();

        properties.load(new FileInputStream(f));
        OutputStream outFile = new FileOutputStream(f);

        System.out.println("output file-------------:"+outFile);

        try {
            String httpHost = request.getParameter("proxyHost");
            String httpPort = request.getParameter("proxyPort");

            if (properties.get("ext.http.proxy.host") != null
                    && properties.get("ext.http.proxy.port") != null) {

                properties.setProperty("ext.http.proxy.host", httpHost.trim());
                properties.setProperty("ext.http.proxy.port", httpPort.trim());
                properties.store(outFile, "hostchanged");

            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            outFile.close();
        }

        return "redirect:/mainPage";

    }

}
4

1 に答える 1

0

Java プロパティを使用すると、コードのコメント部分がスキップされます。したがって、書き戻すと、コメントされた部分が欠落します。

Java プロパティは、プロパティ ファイルからキーと値のペアのみを抽出するように設計されています。すべてのコメントは、人間が読みやすいようにするためのものです。

したがって、コード内のプロパティ オブジェクトには、コメント化されたコードに関する情報がありません。したがって、properties.store() を実行すると、キーと値のペアのみが保存され、前のコメントは保存されません。

プロパティ ファイルの内容をプログラムで変更することはお勧めしません。ただし、そうする場合は、FileWriter を使用して、通常のテキスト ファイルのようにファイルに書き込むことができます。ここに例があります。

于 2012-06-19T05:58:09.940 に答える