我们在开发web项目中,经常有properties配置文件配置数据库连接参数,每次修改的时候还要去找到配置文件,感觉有点麻烦,就用swing做了个小工具修改参数,运行界面如下:

==============================================================

一、项目结构:

二、相关代码:

  1、ConfigTools.java  

  1. package com.xie.main;
  2.  
  3. import java.awt.BorderLayout;
  4. import java.awt.EventQueue;
  5. import java.awt.Toolkit;
  6. import java.util.HashMap;
  7. import java.util.Map;
  8. import java.util.Properties;
  9.  
  10. import javax.swing.JFrame;
  11. import javax.swing.JPanel;
  12. import javax.swing.border.EmptyBorder;
  13. import javax.swing.JLabel;
  14. import javax.swing.JOptionPane;
  15. import javax.swing.GroupLayout;
  16. import javax.swing.GroupLayout.Alignment;
  17. import javax.swing.ImageIcon;
  18. import javax.swing.JButton;
  19. import javax.swing.LayoutStyle.ComponentPlacement;
  20. import javax.swing.border.TitledBorder;
  21.  
  22. import com.xie.util.PropertiesUtils;
  23. import javax.swing.JTabbedPane;
  24. import java.awt.Dimension;
  25.  
  26. import javax.swing.JTextField;
  27. import javax.swing.JComboBox;
  28. import javax.swing.JPasswordField;
  29. import java.awt.event.ActionListener;
  30. import java.awt.event.ActionEvent;
  31. import javax.swing.JScrollPane;
  32. import javax.swing.JTextArea;
  33.  
  34. @SuppressWarnings("serial")
  35. public class ConfigTools extends JFrame {
  36.  
  37. private static Properties properties;
  38. // 配置文件路径
  39. private static String CONFIG_PATH = "resource/config-path.properties";
  40.  
  41. private static String TITLE_IMG; //图片
  42. private static String DB_CONFIG; //数据库
  43. private static Map<String, String> dataconf;
  44.  
  45. private JPanel contentPane;
  46. private JTabbedPane tabbedPane;
  47. private JPanel panel_data;
  48. private JComboBox<String> datatypeValue;
  49. private JTextField dataurlValue;
  50. private JTextField usernameValue;
  51. private JPasswordField passwordValue;
  52.  
  53. /**
  54. * Launch the application.
  55. */
  56. public static void main(String[] args) {
  57. EventQueue.invokeLater(new Runnable() {
  58. public void run() {
  59. try {
  60. getAllConfPath();
  61. getDbConf();
  62. ConfigTools frame = new ConfigTools();
  63. frame.setVisible(true);
  64. } catch (Exception e) {
  65. e.printStackTrace();
  66. }
  67. }
  68. });
  69. }
  70.  
  71. /**
  72. * 读取配置文件路径
  73. * 配置文件:config-path.properties
  74. */
  75. private static void getAllConfPath() {
  76. properties = PropertiesUtils.getProperty(CONFIG_PATH);
  77. TITLE_IMG = properties.getProperty("img.path");
  78. DB_CONFIG = properties.getProperty("db.path");
  79. }
  80.  
  81. /**
  82. * 读取数据源
  83. * 数据源配置文件:config.properties
  84. */
  85. public static void getDbConf(){
  86. dataconf = new HashMap<String, String>();
  87. Properties properties= PropertiesUtils.getProperty(DB_CONFIG);
  88. dataconf.put("db_type", properties.getProperty("db.db_type"));
  89. dataconf.put("db_url", properties.getProperty("db.url"));
  90. dataconf.put("db_username", properties.getProperty("db.username"));
  91. dataconf.put("db_password", properties.getProperty("db.password"));
  92. }
  93.  
  94. /**
  95. * Create the frame.
  96. */
  97. public ConfigTools() {
  98. setTitle("\u914D\u7F6E\u6587\u4EF6\u4FEE\u6539\u5DE5\u5177");
  99. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  100. setBounds(100, 100, 775, 550);
  101. // 设置窗体最小值
  102. setMinimumSize(new Dimension(775, 550));
  103. contentPane = new JPanel();
  104. contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
  105. setContentPane(contentPane);
  106. contentPane.setLayout(new BorderLayout(0, 0));
  107.  
  108. // 居中显示
  109. Toolkit kit = Toolkit.getDefaultToolkit(); // 定义工具包
  110. Dimension screenSize = kit.getScreenSize(); // 获取屏幕的尺寸
  111. int screenWidth = screenSize.width/2; // 获取屏幕的宽
  112. int screenHeight = screenSize.height/2; // 获取屏幕的高
  113. int height = this.getHeight();
  114. int width = this.getWidth();
  115. setLocation(screenWidth-width/2, screenHeight-height/2);
  116.  
  117. /**
  118. * 头部
  119. */
  120. //==================================开始======================================//
  121. String path = TITLE_IMG;
  122. ImageIcon image = new ImageIcon(path);
  123. JLabel labImage = new JLabel(image);
  124.  
  125. JPanel panel_title = new JPanel();
  126. panel_title.setBorder(new TitledBorder(null, "", TitledBorder.LEADING, TitledBorder.TOP, null, null));
  127. contentPane.add(panel_title, BorderLayout.NORTH);
  128.  
  129. panel_title.add(labImage);
  130.  
  131. //==================================结束======================================//
  132.  
  133. /**
  134. * 左边菜单
  135. */
  136. //==================================开始======================================//
  137. JPanel panel_left = new JPanel();
  138. panel_left.setBorder(new TitledBorder(null, "", TitledBorder.LEADING, TitledBorder.TOP, null, null));
  139. contentPane.add(panel_left, BorderLayout.WEST);
  140.  
  141. JButton db_button = new JButton("\u6570 \u636E \u914D \u7F6E");
  142. db_button.addActionListener(new ActionListener() {
  143. public void actionPerformed(ActionEvent e) {
  144. tabbedPane.setSelectedIndex(0);
  145. }
  146. });
  147. JButton finish_button = new JButton("\u5B8C \u6210 \u914D \u7F6E");
  148. finish_button.addActionListener(new ActionListener() {
  149. public void actionPerformed(ActionEvent e) {
  150. tabbedPane.setSelectedIndex(1);
  151. }
  152. });
  153.  
  154. GroupLayout gl_panel_left = new GroupLayout(panel_left);
  155. gl_panel_left.setHorizontalGroup(
  156. gl_panel_left.createParallelGroup(Alignment.TRAILING)
  157. .addGroup(Alignment.LEADING, gl_panel_left.createSequentialGroup()
  158. .addContainerGap()
  159. .addComponent(db_button)
  160. .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
  161. .addGroup(gl_panel_left.createSequentialGroup()
  162. .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
  163. .addComponent(finish_button, GroupLayout.PREFERRED_SIZE, 99, GroupLayout.PREFERRED_SIZE)
  164. .addContainerGap())
  165. );
  166. gl_panel_left.setVerticalGroup(
  167. gl_panel_left.createParallelGroup(Alignment.LEADING)
  168. .addGroup(gl_panel_left.createSequentialGroup()
  169. .addGap(54)
  170. .addComponent(db_button)
  171. .addGap(18)
  172. .addComponent(finish_button)
  173. .addContainerGap(364, Short.MAX_VALUE))
  174. );
  175. panel_left.setLayout(gl_panel_left);
  176.  
  177. JPanel panel_centre = new JPanel();
  178. panel_centre.setBorder(new TitledBorder(null, "", TitledBorder.LEADING, TitledBorder.TOP, null, null));
  179. contentPane.add(panel_centre, BorderLayout.CENTER);
  180. //==================================结束======================================//
  181.  
  182. /**
  183. * 中间内容
  184. */
  185. //==================================开始======================================//
  186. tabbedPane = new JTabbedPane(JTabbedPane.TOP);
  187. GroupLayout gl_panel_centre = new GroupLayout(panel_centre);
  188. gl_panel_centre.setHorizontalGroup(
  189. gl_panel_centre.createParallelGroup(Alignment.LEADING)
  190. .addGroup(Alignment.TRAILING, gl_panel_centre.createSequentialGroup()
  191. .addContainerGap()
  192. .addComponent(tabbedPane, GroupLayout.DEFAULT_SIZE, 589, Short.MAX_VALUE)
  193. .addContainerGap())
  194. );
  195. gl_panel_centre.setVerticalGroup(
  196. gl_panel_centre.createParallelGroup(Alignment.LEADING)
  197. .addGroup(Alignment.TRAILING, gl_panel_centre.createSequentialGroup()
  198. .addContainerGap()
  199. .addComponent(tabbedPane, GroupLayout.DEFAULT_SIZE, 374, Short.MAX_VALUE)
  200. .addContainerGap())
  201. );
  202. /**
  203. * 数据库配置
  204. */
  205. //==================================开始======================================//
  206. panel_data = new JPanel();
  207. panel_data.setToolTipText("");
  208. tabbedPane.addTab("\u6570\u636E\u914D\u7F6E", null, panel_data, null);
  209.  
  210. JPanel panel_data_parameter = new JPanel();
  211. panel_data_parameter.setBorder(new TitledBorder(null, "\u8FDE\u63A5\u53C2\u6570\u914D\u7F6E", TitledBorder.LEADING, TitledBorder.TOP, null, null));
  212.  
  213. JLabel datatype = new JLabel("\u6570\u636E\u5E93\u7C7B\u578B\uFF1A");
  214. JLabel dataurl = new JLabel("\u8FDE\u63A5\u5730\u5740\uFF1A");
  215. JLabel username = new JLabel("\u7528 \u6237 \u540D\uFF1A");
  216. JLabel password = new JLabel("\u5BC6 \u7801\uFF1A");
  217.  
  218. datatypeValue = new JComboBox<String>();
  219. datatypeValue.setEnabled(false);
  220. // 读取当前配置写入输入框(数据库类型)
  221. datatypeValue.addItem(dataconf.get("db_type"));
  222.  
  223. dataurlValue = new JTextField();
  224. dataurlValue.setEnabled(false);
  225. dataurlValue.setColumns(10);
  226. // 读取当前配置写入输入框(URL)
  227. dataurlValue.setText(dataconf.get("db_url"));
  228.  
  229. usernameValue = new JTextField();
  230. usernameValue.setEnabled(false);
  231. usernameValue.setColumns(10);
  232. // 读取当前配置写入输入框(用户名)
  233. usernameValue.setText(dataconf.get("db_username"));
  234.  
  235. passwordValue = new JPasswordField();
  236. passwordValue.setEnabled(false);
  237. // 读取当前配置写入输入框(密码)
  238. passwordValue.setText(dataconf.get("db_password"));
  239.  
  240. GroupLayout gl_panel_data_parameter = new GroupLayout(panel_data_parameter);
  241. gl_panel_data_parameter.setHorizontalGroup(
  242. gl_panel_data_parameter.createParallelGroup(Alignment.LEADING)
  243. .addGroup(gl_panel_data_parameter.createSequentialGroup()
  244. .addGap(20)
  245. .addGroup(gl_panel_data_parameter.createParallelGroup(Alignment.LEADING)
  246. .addComponent(datatype)
  247. .addComponent(password)
  248. .addComponent(dataurl)
  249. .addComponent(username))
  250. .addGap(41)
  251. .addGroup(gl_panel_data_parameter.createParallelGroup(Alignment.TRAILING)
  252. .addComponent(passwordValue, GroupLayout.DEFAULT_SIZE, 361, Short.MAX_VALUE)
  253. .addComponent(usernameValue, GroupLayout.DEFAULT_SIZE, 361, Short.MAX_VALUE)
  254. .addComponent(dataurlValue, GroupLayout.DEFAULT_SIZE, 361, Short.MAX_VALUE)
  255. .addComponent(datatypeValue, Alignment.LEADING, 0, 361, Short.MAX_VALUE))
  256. .addGap(71))
  257. );
  258. gl_panel_data_parameter.setVerticalGroup(
  259. gl_panel_data_parameter.createParallelGroup(Alignment.LEADING)
  260. .addGroup(gl_panel_data_parameter.createSequentialGroup()
  261. .addContainerGap()
  262. .addGroup(gl_panel_data_parameter.createParallelGroup(Alignment.BASELINE)
  263. .addComponent(datatype)
  264. .addComponent(datatypeValue, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
  265. .addGap(18)
  266. .addGroup(gl_panel_data_parameter.createParallelGroup(Alignment.BASELINE)
  267. .addComponent(dataurlValue, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
  268. .addComponent(dataurl))
  269. .addGap(21)
  270. .addGroup(gl_panel_data_parameter.createParallelGroup(Alignment.BASELINE)
  271. .addComponent(usernameValue, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
  272. .addComponent(username))
  273. .addGap(18)
  274. .addGroup(gl_panel_data_parameter.createParallelGroup(Alignment.BASELINE)
  275. .addComponent(password)
  276. .addComponent(passwordValue, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
  277. .addContainerGap(88, Short.MAX_VALUE))
  278. );
  279.  
  280. //==============================================================//
  281. /**
  282. * 点击编辑按钮,输入框可以编辑
  283. */
  284. JButton database_edit = new JButton("\u7F16 \u8F91");
  285. JButton database_save = new JButton("\u4FDD \u5B58");
  286. database_save.setEnabled(false);
  287.  
  288. database_edit.addActionListener(new ActionListener() {
  289. public void actionPerformed(ActionEvent e) {
  290. datatypeValue.setEnabled(true);
  291. datatypeValue.removeAllItems();
  292. datatypeValue.addItem("oracle"); //oracle数据库
  293. datatypeValue.addItem("mysql"); //mysql数据库
  294. datatypeValue.addItem("mssql"); //mssql数据库
  295. dataurlValue.setEnabled(true);
  296. usernameValue.setEnabled(true);
  297. passwordValue.setEnabled(true);
  298. database_save.setEnabled(true);
  299. }
  300. });
  301.  
  302. /**
  303. * 点击保存后,将数据写入配置文件
  304. */
  305. database_save.addActionListener(new ActionListener() {
  306. public void actionPerformed(ActionEvent e) {
  307. Map<String, String> data = new HashMap<String, String>();
  308. String datatype = datatypeValue.getSelectedItem().toString();
  309. String dataurl = dataurlValue.getText().toString();
  310. String username = usernameValue.getText().toString();
  311. String password = new String(passwordValue.getPassword());
  312. if("".equals(datatype)){
  313. Toolkit.getDefaultToolkit().beep();
  314. JOptionPane.showMessageDialog(null, "数据库类型不能为空!", "提示", JOptionPane.INFORMATION_MESSAGE);
  315. }else if("".equals(dataurl)){
  316. Toolkit.getDefaultToolkit().beep();
  317. JOptionPane.showMessageDialog(null, "连接地址不能为空!", "提示", JOptionPane.INFORMATION_MESSAGE);
  318. }else if("".equals(username)){
  319. Toolkit.getDefaultToolkit().beep();
  320. JOptionPane.showMessageDialog(null, "用户名不能为空!", "提示", JOptionPane.INFORMATION_MESSAGE);
  321. }else if("".equals(password)){
  322. Toolkit.getDefaultToolkit().beep();
  323. JOptionPane.showMessageDialog(null, "密码不能为空!", "提示", JOptionPane.INFORMATION_MESSAGE);
  324. }else{
  325. data.put("db.db_type", datatype);
  326. data.put("db.url", dataurl);
  327. data.put("db.username", username);
  328. data.put("db.password", new String(password));
  329. String msg = PropertiesUtils.setProperty(DB_CONFIG, data);
  330. if("true".equals(msg)){
  331. Toolkit.getDefaultToolkit().beep();
  332. JOptionPane.showMessageDialog(null, "保存成功!", "提示", JOptionPane.PLAIN_MESSAGE);
  333. }else{
  334. Toolkit.getDefaultToolkit().beep();
  335. JOptionPane.showMessageDialog(null, "保存异常!", "提示", JOptionPane.ERROR_MESSAGE);
  336. }
  337. }
  338.  
  339. }
  340. });
  341. //==============================================================//
  342.  
  343. GroupLayout gl_panel_data = new GroupLayout(panel_data);
  344. gl_panel_data.setHorizontalGroup(
  345. gl_panel_data.createParallelGroup(Alignment.TRAILING)
  346. .addGroup(gl_panel_data.createSequentialGroup()
  347. .addGap(133)
  348. .addComponent(database_edit, GroupLayout.PREFERRED_SIZE, 95, GroupLayout.PREFERRED_SIZE)
  349. .addPreferredGap(ComponentPlacement.RELATED, 142, Short.MAX_VALUE)
  350. .addComponent(database_save, GroupLayout.PREFERRED_SIZE, 95, GroupLayout.PREFERRED_SIZE)
  351. .addGap(132))
  352. .addGroup(gl_panel_data.createSequentialGroup()
  353. .addGap(20)
  354. .addComponent(panel_data_parameter, GroupLayout.DEFAULT_SIZE, 577, Short.MAX_VALUE))
  355. );
  356. gl_panel_data.setVerticalGroup(
  357. gl_panel_data.createParallelGroup(Alignment.TRAILING)
  358. .addGroup(gl_panel_data.createSequentialGroup()
  359. .addContainerGap()
  360. .addComponent(panel_data_parameter, GroupLayout.PREFERRED_SIZE, 209, GroupLayout.PREFERRED_SIZE)
  361. .addPreferredGap(ComponentPlacement.RELATED, 159, Short.MAX_VALUE)
  362. .addGroup(gl_panel_data.createParallelGroup(Alignment.BASELINE)
  363. .addComponent(database_save)
  364. .addComponent(database_edit))
  365. .addGap(32))
  366. );
  367. panel_data_parameter.setLayout(gl_panel_data_parameter);
  368. panel_data.setLayout(gl_panel_data);
  369. //==================================结束======================================//
  370.  
  371. /**
  372. * 完成配置
  373. */
  374. //==================================开始======================================//
  375. JPanel panel_finish = new JPanel();
  376. tabbedPane.addTab("\u5B8C\u6210\u914D\u7F6E", null, panel_finish, null);
  377.  
  378. JButton start = new JButton("\u542F \u52A8");
  379.  
  380. JPanel panel_finish_parameter = new JPanel();
  381. panel_finish_parameter.setBorder(new TitledBorder(null, "\u8FD0\u884C\u4FE1\u606F", TitledBorder.LEADING, TitledBorder.TOP, null, null));
  382. GroupLayout gl_panel_finish = new GroupLayout(panel_finish);
  383. gl_panel_finish.setHorizontalGroup(
  384. gl_panel_finish.createParallelGroup(Alignment.LEADING)
  385. .addGroup(gl_panel_finish.createSequentialGroup()
  386. .addContainerGap()
  387. .addGroup(gl_panel_finish.createParallelGroup(Alignment.LEADING)
  388. .addComponent(panel_finish_parameter, GroupLayout.DEFAULT_SIZE, 577, Short.MAX_VALUE)
  389. .addComponent(start))
  390. .addContainerGap())
  391. );
  392. gl_panel_finish.setVerticalGroup(
  393. gl_panel_finish.createParallelGroup(Alignment.LEADING)
  394. .addGroup(gl_panel_finish.createSequentialGroup()
  395. .addContainerGap()
  396. .addComponent(start)
  397. .addPreferredGap(ComponentPlacement.UNRELATED)
  398. .addComponent(panel_finish_parameter, GroupLayout.DEFAULT_SIZE, 308, Short.MAX_VALUE)
  399. .addContainerGap())
  400. );
  401.  
  402. JScrollPane scrollPane = new JScrollPane();
  403. GroupLayout gl_panel_finish_parameter = new GroupLayout(panel_finish_parameter);
  404. gl_panel_finish_parameter.setHorizontalGroup(
  405. gl_panel_finish_parameter.createParallelGroup(Alignment.LEADING)
  406. .addComponent(scrollPane, Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, 565, Short.MAX_VALUE)
  407. );
  408. gl_panel_finish_parameter.setVerticalGroup(
  409. gl_panel_finish_parameter.createParallelGroup(Alignment.LEADING)
  410. .addComponent(scrollPane, Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, 356, Short.MAX_VALUE)
  411. );
  412.  
  413. JTextArea textArea = new JTextArea();
  414. scrollPane.setViewportView(textArea);
  415. panel_finish_parameter.setLayout(gl_panel_finish_parameter);
  416. panel_finish.setLayout(gl_panel_finish);
  417. panel_centre.setLayout(gl_panel_centre);
  418.  
  419. //==================================结束======================================//
  420.  
  421. }
  422. }

  2、PropertiesUtils.java

  1. package com.xie.util;
  2.  
  3. import java.io.FileInputStream;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. import java.io.InputStream;
  7. import java.io.InputStreamReader;
  8. import java.io.OutputStream;
  9. import java.util.Iterator;
  10. import java.util.Map;
  11. import java.util.Map.Entry;
  12. import java.util.Properties;
  13.  
  14. public class PropertiesUtils {
  15.  
  16. /**
  17. * 通过配置文件名获取配置信息
  18. * @param fileName
  19. * @return
  20. */
  21. public static Properties getProps(String fileName){
  22. Properties props = new Properties();
  23. try {
  24. // 只需要文件名 dbconfig.properties与resource/dbconfig.properties的区别
  25. props.load(new InputStreamReader(PropertiesUtils.class.getClassLoader().getResourceAsStream(fileName), "UTF-8"));
  26. } catch (IOException e) {
  27. e.printStackTrace();
  28. }
  29. return props;
  30. }
  31.  
  32. /**
  33. * 通过配置文件路径获取配置信息
  34. * @param fileName
  35. * @return
  36. */
  37. public static Properties getProperty(String fileName) {
  38. //第一步是取得一个Properties对象
  39. Properties props = new Properties();
  40. //第二步是取得配置文件的输入流
  41. //InputStream is = PropertiesUtils.class.getClassLoader().getResourceAsStream("dbconfig.properties");//在非WEB环境下用这种方式比较方便
  42. try {
  43. InputStream input = new FileInputStream(fileName);
  44. // 第三步是把配置文件的输入流load到Properties对象中,
  45. props.load(input);
  46. // 注意两种的区别
  47. //props.load(new InputStreamReader(PropertiesUtil.class.getClassLoader().getResourceAsStream(fileName), "UTF-8"));
  48. } catch (IOException e) {
  49. System.out.println(e.getMessage());
  50. e.printStackTrace();
  51. }
  52. return props;
  53. }
  54.  
  55. /**
  56. * properties获取key值
  57. * @param fileName
  58. * @param key
  59. * @return
  60. */
  61. public static String getProperty(String fileName, String key) {
  62. String value = "";
  63. //第一步是取得一个Properties对象
  64. Properties props = new Properties();
  65. //第二步是取得配置文件的输入流
  66. //InputStream is = PropertiesUtils.class.getClassLoader().getResourceAsStream("dbconfig.properties");//在非WEB环境下用这种方式比较方便
  67. try {
  68. //InputStream input = new FileInputStream("dbconfig.properties");//在WEB环境下用这种方式比较方便,不过当配置文件是放在非Classpath目录下的时候也需要用这种方式
  69. //第三步讲配置文件的输入流load到Properties对象中,这样在后面就可以直接取来用了
  70. props.load(new InputStreamReader(PropertiesUtils.class.getClassLoader().getResourceAsStream(fileName), "UTF-8"));
  71. value = props.getProperty(key);
  72. //is.close();
  73. } catch (IOException e) {
  74. e.printStackTrace();
  75. }
  76. return value;
  77. }
  78.  
  79. /**
  80. * properties写入key值
  81. * @param fileName
  82. * @param data
  83. */
  84. public static String setProperty(String fileName, Map<String, String> data) {
  85. String message = "true";
  86.  
  87. // 第一步也是取得一个Properties对象
  88. Properties props = new Properties();
  89. // 第二步也是取得该配置文件的输入流
  90. // InputStream is = PropUtil.class.getClassLoader().getResourceAsStream("dbconfig.properties");
  91. try {
  92. InputStream input = new FileInputStream(fileName);
  93. // 第三步是把配置文件的输入流load到Properties对象中,
  94. // props.load(new InputStreamReader(PropertiesUtils.class.getClassLoader().getResourceAsStream(fileName), "UTF-8"));
  95. props.load(input);
  96. // 接下来就可以随便往配置文件里面添加内容了
  97. // props.setProperty(key, value);
  98. if (data != null) {
  99. Iterator<Entry<String, String>> iter = data.entrySet().iterator();
  100. while (iter.hasNext()) {
  101. Entry<String, String> entry = iter.next();
  102. props.setProperty(entry.getKey().toString(), entry.getValue().toString());
  103. }
  104. }
  105. // 在保存配置文件之前还需要取得该配置文件的输出流,切记,如果该项目是需要导出的且是一个非WEB项目,
  106. // 则该配置文件应当放在根目录下,否则会提示找不到配置文件
  107. OutputStream out = new FileOutputStream(fileName);
  108. // 最后就是利用Properties对象保存配置文件的输出流到文件中;
  109. props.store(out, null);
  110. input.close();
  111. out.flush();
  112. out.close();
  113. } catch (IOException e) {
  114. message = "false";
  115. e.printStackTrace();
  116. }
  117.  
  118. return message;
  119. }
  120.  
  121. public static void main(String[] args) {
  122. System.out.println(PropertiesUtils.getProps("dbconfig.properties"));
  123. // System.out.println(PropertiesUtils.getProperty("resource/dbconfig.properties"));
  124. // Map<String, String> data = new HashMap<String, String>();
  125. // data.put("db.db_type", "oracle1");
  126. // data.put("db.username", "root1");
  127. // data.put("db.password", "root1");
  128. // PropertiesUtils.setProperty("resource/dbconfig.properties", data);
  129. }
  130.  
  131. }

  3、config-path.properties

  1. img.path=resource/image/title.png
  2. db.path=resource/dbconfig.properties

  4、dbconfig.properties

  1. #Oracle
  2. db.db_type=oracle
  3. db.driver=oracle.jdbc.driver.OracleDriver
  4. db.dialect=org.hibernate.dialect.Oracle10gDialect
  5. db.url=jdbc\:oracle\:thin\:@127.0.0.1\:1521\:tsm1
  6. db.username=root
  7. db.password=root

swing开发一个修改项目数据库连接参数配置文件的更多相关文章

  1. iOS开发系列-修改项目工程名

    当前有项目工程名为iOS,需要修改工程名为IFLY.在修改前注意备份项目 修改项目名 出现弹框,点击Rename 修改工程目录文件名 注意Tests与UITests不要删除 选中IFLY.xcodep ...

  2. 【Vue 入门】使用 Vue2 开发一个展示项目列表的应用

    前言 一直没有找到一个合适的展示个人项目的模板,所以自己动手使用 Vue 写了一个.该模板基于 Markdown 文件进行配置,只需要按一定规则编写 Markdown 文件,然后使用一个 在线工具 转 ...

  3. 开发一个c#的数据库连接池

    c#操作数据库是一个经典,用习惯了以后真感觉不错,很简单的.现在很多关系数据库都支持c#.c#的ADO.NET规范都遵守. 对于一般的设置,ADO.NET都放在数据库连接字符串上.比如池化,连接超时等 ...

  4. 开发一个android项目后的总结

    首先是自己在OneNote上面记录了一些流水: 个人感觉这一路开发下来,学到了一些知识,也碰到了许许多多的问题,也解决了一些问题.总体来看,有几点(个人观点,不支持任何讨论): 1.Java是很优秀的 ...

  5. jeesite快速开发平台(三)----项目文件结构与配置文件详解

    转自:https://blog.csdn.net/u011781521/article/details/54893535

  6. 01 . Go之Gin+Vue开发一个线上外卖应用

    项目介绍 我们将开始使用Gin框架开发一个api项目,我们起名为:云餐厅.如同饿了么,美团外卖等生活服务类应用一样,云餐厅是一个线上的外卖应用,应用的用户可以在线浏览商家,商品并下单. 该项目分为客户 ...

  7. 行内人解读开发一个App需要多少钱?

    对于很多互联网的创业者来说,评估前期的创业成本是很重要的.在这几年的创业大潮中,伴随着“互联网+”和“互联网思维”的普及,很多创业项目选择了开发app作为创业项目的载体.在我接触到的很多创业者,找Ap ...

  8. 03 . Gin+Vue开发一个线上外卖应用(用户数据创建,插入,跨域处理)

    功能和背景介绍 在项目的登录功能中,如果在登录时发现用户名和密码在用户表中不存在,会自动将用户名和密码保存在用户表中,创建一个新的用户. 因此,除了使用手机号和验证码登录以外,还支持使用用户名.密码进 ...

  9. 改造继续之eclipse集成tomcat开发spring mvc项目配置一览

    在上一篇的环境配置中,你还只能基于maven开发一个javase的项目,本篇来看如果开发一个web项目,所以还得配置一下tomcat和spring mvc. 一:Tomcat安装 在.net web开 ...

随机推荐

  1. ECMAScript基本语法——⑤运算符 一元运算符

    ++自增 在前先自增,再运算 在后先运算,再自增 --自减 在前先自减,再运算 在后先运算,再自减 +正号,-负号.表示数字的正负 注意:在JavaScript中,如果运算数不是运算符要求的类型, 那 ...

  2. fastadmin 框架中图片点击放大

    fastadmin的原生图片预览,重新打开一个窗口太麻烦,使用layui做一个弹窗式的图片预览 1.将下面代码放在backend-init.js文件中 $('body').on('click', '[ ...

  3. 微信小程序块导航

    1.wxml页面 <!--index.wxml--> <swiper current="{{currentTab}}" class="swiper-bo ...

  4. 基于alpine的php-fpm扩展swoole和pdo_mysql

    vim Dockerfile 插入一下内容 FROM php:fpm-alpine RUN echo http://mirrors.aliyun.com/alpine/v3.10/main>/e ...

  5. svn checkout使用

    (1)需要知道三个东西:svn路径和号码和密码. (2)svn导出的地方建立需要的目录,然后在不同目录下svn check out,输入正确的路径和号码和密码,这样就可以正常svn下来目录了.

  6. [Codechef CHSTR] Chef and String - 后缀数组

    [Codechef CHSTR] Chef and String Description 每次询问 \(S\) 的子串中,选出 \(k\) 个相同子串的方案有多少种. Solution 本题要求不是很 ...

  7. too old

    The working copy at “” is too old (format 10) to work with client version ‘1.9.7(r18000392)’ 原因:svn版 ...

  8. 简述python(threading)多线程

    一.概述 import threading 调用 t1 = threading.Thread(target=function , args=(,)) Thread类的实例方法 # join():在子线 ...

  9. 剑指offer 面试题. 二叉搜索树的第k个结点

    题目描述 给定一棵二叉搜索树,请找出其中的第k小的结点.例如, (5,3,7,2,4,6,8)    中,按结点数值大小顺序第三小结点的值为4.     解: 由于二叉搜索树的中序遍历是升序,所以在中 ...

  10. sql server和eclipse连接代码

    新建java程序:必须添加sql server驱动程序(上篇博文中有详细过程) package asd; import java.sql.*; //创建数据库连接类 public class DBCo ...