public void openFile(File file) {
		boolean enable = true;
		this.edited = false;
		this.hidePass = false;
		this.makePass = true;
		this.passLength = 8;
		this.useLowerCase = true;
		this.useUpperCase = false;
		this.useNumber = true;
		JAXBElement<Db> je = createXMLObject(file);
		if (je != null) {
			Db db = je.getValue();
			if (!checkValidation(db)) {
				String msg = file.getAbsoluteFile() + "に整合性のエラーを検出しました．\n"
						+ "\"了解\"を押すと整合性の取れた状態で表示を行います．\n"
						+ "この状態では保存はされていません．\n";
				JOptionPane.showMessageDialog(this.mainFrame, msg,
						"ファイルの整合性エラー", JOptionPane.WARNING_MESSAGE);
			}
			this.db = db;
			this.mainFrame.setServiceList(this.db.getData());
			this.selectService(new Service());
			this.fileName = file.getName();

			// dbから設定を読み込む(あれば)
			this.readConfig();
		} else {
			this.db = new Db();
			this.db.setData(new Data());
			this.db.setMarkDefs(new MarkDefs());
			this.db.setConfig(this.createConfig());
			if (this.fileName == null) {
				enable = false;
			}
			JOptionPane.showMessageDialog(this.mainFrame,
					file.getAbsoluteFile() + "のオープンに失敗しました.\n"
							+ "ファイルを新規作成します.", "エラー",
					JOptionPane.WARNING_MESSAGE);
			this.fileName = "password.xml";
		}
		// 登録されている全マークを取得
		if (this.db.getMarkDefs() != null) {
			for (Def def : this.db.getMarkDefs().getDef()) {
				this.markCountMap.put(def.getId(), 0);
			}
			// 各マークの参照数をカウント
			for (Service service : this.db.getData().getService()) {
				for (Mark mark : service.getMark()) {
					markCountMap.put(mark.getId(),
							markCountMap.get(mark.getId()) + 1);
				}
			}
		}
		this.mainFrame.getOverwriteItem().setEnabled(enable);
		if (Setting.USE_CIPHER) {
			this.mainFrame.getOverwriteWithNewPassItem().setEnabled(enable);
			if (this.password == null) {
				enable = false;
			} else {
				enable = true;
			}
		}
		this.setMenuItemEnabled(this.mainFrame.getDeleteItem(), false);
	}