Hadoop 文件查看工具
来源:互联网 发布:电脑打不开软件没反应 编辑:程序博客网 时间:2024/05/16 10:33
packages.config
<?xml version="1.0" encoding="utf-8"?><packages> <package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net45" /> <package id="Microsoft.Data.Edm" version="5.2.0" targetFramework="net45" /> <package id="Microsoft.Data.OData" version="5.2.0" targetFramework="net45" /> <package id="Microsoft.Hadoop.WebClient" version="0.12.5126.42915" targetFramework="net45" /> <package id="Microsoft.WindowsAzure.ConfigurationManager" version="1.8.0.0" targetFramework="net45" /> <package id="Newtonsoft.Json" version="6.0.4" targetFramework="net45" /> <package id="System.Spatial" version="5.2.0" targetFramework="net45" /> <package id="WindowsAzure.Storage" version="2.0.4.1" targetFramework="net45" /></packages>
Explorer.cs
using System;using System.Globalization;using System.IO;using System.Linq;using System.Windows.Forms;using Microsoft.Hadoop.WebHDFS;namespace HdfsExplore{ public partial class Explorer : Form { private WebHDFSClient client; public Explorer() { InitializeComponent(); if (!CreateClient()) { return; } // 使用驱动器列表填充TreeView PopulateDriveList(); } //此过程使用驱动器列表填充TreeView private async void PopulateDriveList() { TreeNode nodeTreeNode; var imageIndex = 0; var selectIndex = 0; const int Removable = 2; const int LocalDisk = 3; const int Network = 4; const int CD = 5; //const int RAMDrive = 6; Cursor = Cursors.WaitCursor; //清除TreeView tvFolders.Nodes.Clear(); nodeTreeNode = new TreeNode("Hadoop Root", 0, 0); tvFolders.Nodes.Add(nodeTreeNode); //设置节点集合 var nodeCollection = nodeTreeNode.Nodes; var x = await client.GetDirectoryStatus("/"); foreach (var mo in x.Directories) { //switch (int.Parse(mo["DriveType"].ToString())) //{ // case Removable: //removable drives // imageIndex = 5; // selectIndex = 5; // break; // case LocalDisk: //Local drives // imageIndex = 6; // selectIndex = 6; // break; // case CD: //CD rom drives // imageIndex = 7; // selectIndex = 7; // break; // case Network: //Network drives // imageIndex = 8; // selectIndex = 8; // break; // default: //defalut to folder // imageIndex = 2; // selectIndex = 3; // break; //} imageIndex = 6; selectIndex = 6; //创建新的驱动器节点 nodeTreeNode = new TreeNode(mo.PathSuffix, imageIndex, selectIndex); //添加新节点 nodeCollection.Add(nodeTreeNode); } //初始化文件ListView InitListView(); Cursor = Cursors.Default; } private void tvFolders_AfterSelect(object sender, TreeViewEventArgs e) { //选择文件夹时填充文件夹和文件 Cursor = Cursors.WaitCursor; //获取当前所选驱动器或文件夹 var nodeCurrent = e.Node; //清除所有子文件夹 nodeCurrent.Nodes.Clear(); if (nodeCurrent.SelectedImageIndex == 0) { //重新填写驱动器列表 PopulateDriveList(); } else { //填充子文件夹和文件夹文件 PopulateDirectory(nodeCurrent, nodeCurrent.Nodes); } Cursor = Cursors.Default; } protected void InitListView() { //初始化ListView控件 lvFiles.Clear(); //创建ListView的列标题 lvFiles.Columns.Add("名称", 150, HorizontalAlignment.Left); lvFiles.Columns.Add("大小", 75, HorizontalAlignment.Right); lvFiles.Columns.Add("上次访问", 140, HorizontalAlignment.Left); lvFiles.Columns.Add("上次修改", 140, HorizontalAlignment.Left); lvFiles.Columns.Add("用有者", 75); lvFiles.Columns.Add("权限", 75); } protected async void PopulateDirectory(TreeNode nodeCurrent, TreeNodeCollection nodeCurrentCollection) { TreeNode nodeDir; var imageIndex = 2; //未选择的图像索引 var selectIndex = 3; //选择图像索引 if (nodeCurrent.SelectedImageIndex != 0) { //用文件夹填充树视图 try { var directoryStatus = await client.GetDirectoryStatus(getFullPath(nodeCurrent.FullPath)); var dirs = directoryStatus.Directories; //check path //if (!dirs.Any()) //{ // MessageBox.Show("Directory or path " + nodeCurrent.ToString() + " does not exist."); //} //else //{ //填充文件 PopulateFiles(nodeCurrent); var stringDirectories = dirs.Select(x => x.PathSuffix).ToArray(); var stringFullPath = ""; var stringPathName = ""; //循环遍历所有目录 foreach (var stringDir in stringDirectories) { stringFullPath = stringDir; stringPathName = GetPathName(stringFullPath); //创建目录节点 nodeDir = new TreeNode(stringPathName, imageIndex, selectIndex); nodeCurrentCollection.Add(nodeDir); } //} } catch (IOException e) { MessageBox.Show("Error: Drive not ready or directory does not exist."); } catch (UnauthorizedAccessException e) { MessageBox.Show("Error: Drive or directory access denided."); } catch (Exception e) { MessageBox.Show("Error: " + e); } } } protected string GetPathName(string stringPath) { //获取文件夹的名称 var stringSplit = stringPath.Split('\\'); var _maxIndex = stringSplit.Length; return stringSplit[_maxIndex - 1]; } protected async void PopulateFiles(TreeNode nodeCurrent) { //使用文件填充列表视图 var lvData = new string[6]; //清除列表 InitListView(); if (nodeCurrent.SelectedImageIndex != 0) { var directoryStatus = await client.GetDirectoryStatus(getFullPath(nodeCurrent.FullPath)); try { var files = directoryStatus.Files; // Directory.GetFiles(getFullPath(nodeCurrent.FullPath)); var stringFileName = ""; string dtCreateDate, dtModifyDate; Int64 lFileSize = 0; //循环遍历所有文件 foreach (var file in files) { stringFileName = file.PathSuffix; //FileInfo objFileSize = new FileInfo(stringFileName); lFileSize = file.Length; dtCreateDate = Utility.JavaTicksToDatetime(file.AccessTime).ToString(); //GetCreationTime(stringFileName); dtModifyDate = Utility.JavaTicksToDatetime(file.ModificationTime).ToString(); //GetLastWriteTime(stringFileName); //创建列表视图数据 lvData[0] = GetPathName(stringFileName); lvData[1] = formatSize(lFileSize); lvData[2] = dtCreateDate; lvData[3] = dtModifyDate; lvData[4] = file.Owner; lvData[5] = file.Permission; //创建实际列表项 var lvItem = new ListViewItem(lvData, 0); lvFiles.Items.Add(lvItem); } } catch (IOException e) { MessageBox.Show("错误:驱动器未准备好或目录不存在."); } catch (UnauthorizedAccessException e) { MessageBox.Show("错误:驱动器或目录访问被拒绝."); } catch (Exception e) { } // } } } protected string getFullPath(string stringPath) { //获取完整路径 var stringParse = ""; //从路径中删除根目录. stringParse = stringPath.Replace("Hadoop Root\\", "/").Replace("\\", "/"); return stringParse; } protected string getFullPath(TreeNode nodeCurrent) { var path = nodeCurrent.FullPath; return getFullPath(path); } protected string formatSize(Int64 lSize) { //格式编号为KB var stringSize = ""; var myNfi = new NumberFormatInfo(); Int64 lKBSize = 0; if (lSize < 1024) { if (lSize == 0) { //0 byte stringSize = "0"; } else { //小于1K但不是零字节 stringSize = "1"; } } else { //转换为KB lKBSize = lSize / 1024; //默认格式的格式数字 stringSize = lKBSize.ToString("n", myNfi); //移除 decimal stringSize = stringSize.Replace(".00", ""); } return stringSize + " KB"; } private void menuItem2_Click(object sender, EventArgs e) { //退出应用 Close(); } private void tvFolders_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { if (e.Button != MouseButtons.Right) return; if (e.Node == null) return; //MessageBox.Show(e.Node.FullPath); tvFolders.SelectedNode = e.Node; InitcmsOneRout(); cmsOneRout.Show(tvFolders, e.X, e.Y); } private void InitcmsOneRout() { cmsOneRout = new ContextMenuStrip(); var tmiEditRoutStation = new ToolStripMenuItem("修改Owner"); cmsOneRout.Items.Add(tmiEditRoutStation); var changePermission = new ToolStripMenuItem("修改权限"); changePermission.Click += changePress_Click; cmsOneRout.Items.Add(changePermission); var tmiDel = new ToolStripMenuItem("删除"); tmiDel.Click += tmiDel_Click; cmsOneRout.Items.Add(tmiDel); } async void changePress_Click(object sender, EventArgs e) { //if (lvFiles.SelectedItems.Count == 0) // return; if (tvFolders.SelectedNode == null) return; var remotepath = getFullPath(tvFolders.SelectedNode); //var remotefile = remotepath.TrimEnd('/') + "/" + lvFiles.SelectedItems[0].Text; var permissions = await client.GetFileStatus(remotepath); InputName ip = new InputName("修改权限(" + remotepath + ")", permissions.Permission); if (ip.ShowDialog() == System.Windows.Forms.DialogResult.OK) { if (string.IsNullOrWhiteSpace(ip.StrInput)) { MessageBox.Show("不能为空项"); return; } await client.SetPermissions(remotepath, ip.StrInput); } } private void tmiDel_Click(object sender, EventArgs e) { var path = getFullPath(tvFolders.SelectedNode); //client = new WebHDFSClient(new Uri("http://zhangbaowei:50070"), "hadoop"); client.DeleteDirectory(path, true); MessageBox.Show("删除完成"); tvFolders.SelectedNode.Remove(); } private void menuItem5_Click(object sender, EventArgs e) { var parentPath = "/"; if (tvFolders.SelectedNode != null) { parentPath = getFullPath(tvFolders.SelectedNode); } var name = new InputName(); if (name.ShowDialog() != DialogResult.OK) return; var newname = name.StrInput; client.CreateDirectory(parentPath.TrimEnd('/') + "/" + newname); } private void menuItem6_Click(object sender, EventArgs e) { showSetting(); PopulateDriveList(); } private void showSetting() { var setting = new Setting(); if (setting.ShowDialog() == DialogResult.OK) { CreateClient(); } } private bool CreateClient() { var url = AppConfig.GetValue("hdfsurl"); var username = AppConfig.GetValue("username"); if (string.IsNullOrWhiteSpace(url) || string.IsNullOrWhiteSpace(username)) { MessageBox.Show("未进行正确配置"); showSetting(); return false; } client = new WebHDFSClient(new Uri(url), username); return true; } private void menuItem7_Click(object sender, EventArgs e) { if (tvFolders.SelectedNode == null) { MessageBox.Show("未选中上传目标"); return; } OpenFileDialog of = new OpenFileDialog(); of.Multiselect = true; if (of.ShowDialog() == System.Windows.Forms.DialogResult.OK) { var remotepath = getFullPath(tvFolders.SelectedNode); var filename = of.FileNames; foreach (var s in filename) { client.CreateFile(s, remotepath.TrimEnd('/') + "/" + Path.GetFileName(s)); } PopulateFiles(tvFolders.SelectedNode); } } private void menuItem8_Click(object sender, EventArgs e) { var items = lvFiles.SelectedItems; var remotepath = getFullPath(tvFolders.SelectedNode); foreach (var item in items) { var filename = ((ListViewItem)item).Text; client.DeleteDirectory(remotepath.TrimEnd('/') + "/" + filename); } } private async void lvFiles_MouseDoubleClick(object sender, MouseEventArgs e) { ListViewHitTestInfo info = lvFiles.HitTest(e.X, e.Y); ListViewItem item = info.Item; if (item != null) { //MessageBox.Show("The selected Item Name is: " + item.Text); var remotepath = getFullPath(tvFolders.SelectedNode); var remotefile = remotepath.TrimEnd('/') + "/" + item.Text; var message = await client.OpenFile(remotefile); var content = await message.Content.ReadAsStringAsync(); ContentViewer cv = new ContentViewer(content, remotefile); cv.Show(); } else { this.lvFiles.SelectedItems.Clear(); MessageBox.Show("No Item is selected"); } } private void lvFiles_MouseClick(object sender, MouseEventArgs e) { //判断鼠标是否右键 if (e.Button == MouseButtons.Right) { if (this.lvFiles.SelectedItems.Count > 0) //选中项 { var cmslv = new ContextMenuStrip(); var tmiEditRoutStation = new ToolStripMenuItem("权限"); tmiEditRoutStation.Click += tmiEditRoutStation_Click; cmslv.Items.Add(tmiEditRoutStation); var tmiDelte = new ToolStripMenuItem("删除"); tmiDelte.Click += tmiDelte_Click; cmslv.Items.Add(tmiDelte); var downloadFile = new ToolStripMenuItem("下载"); downloadFile.Click += downloadFile_Click; cmslv.Items.Add(downloadFile); cmslv.Show(lvFiles, e.Location); //this.lvFiles.ContextMenuStrip = cms选中菜单; } else //未选中项 { //this.lvFiles.ContextMenuStrip = cms未选中菜单; } } } async void downloadFile_Click(object sender, EventArgs e) { if (lvFiles.SelectedItems.Count == 0) return; var remotepath = getFullPath(tvFolders.SelectedNode); var filefolder = new FolderBrowserDialog(); if (filefolder.ShowDialog() != System.Windows.Forms.DialogResult.OK) return; var locafolder = filefolder.SelectedPath; foreach (var lvFile in lvFiles.SelectedItems) { var removefilename = ((ListViewItem)lvFile).Text; var remotefile = remotepath.TrimEnd('/') + "/" + removefilename; var file = await client.OpenFile(remotefile); var filebytes = await file.Content.ReadAsByteArrayAsync(); var locafile = locafolder + "/" + removefilename; System.IO.File.WriteAllBytes(locafile, filebytes); //lvFiles.Items.Remove((ListViewItem)lvFile); } MessageBox.Show("下载成功"); } async void tmiDelte_Click(object sender, EventArgs e) { if (lvFiles.SelectedItems.Count == 0) return; var remotepath = getFullPath(tvFolders.SelectedNode); foreach (var lvFile in lvFiles.SelectedItems) { var remotefile = remotepath.TrimEnd('/') + "/" + ((ListViewItem)lvFile).Text; await client.DeleteDirectory(remotefile); lvFiles.Items.Remove((ListViewItem)lvFile); } } async void tmiEditRoutStation_Click(object sender, EventArgs e) { if (lvFiles.SelectedItems.Count == 0) return; var remotepath = getFullPath(tvFolders.SelectedNode); var remotefile = remotepath.TrimEnd('/') + "/" + lvFiles.SelectedItems[0].Text; InputName ip = new InputName("修改权限(" + remotefile + ")"); if (ip.ShowDialog() == System.Windows.Forms.DialogResult.OK) { if (string.IsNullOrWhiteSpace(ip.StrInput)) { MessageBox.Show("不能为空项"); return; } await client.SetPermissions(remotefile, ip.StrInput); } } }}
运行结果如图:
阅读全文
0 0
- Hadoop 文件查看工具
- 通过工具查看Hadoop的 fimage 文件和 edits 文件
- hadoop文件查看器
- 文件目录查看工具
- 文件查看工具
- hadoop 查看文件的常用命令
- hadoop文件操作工具类
- sql日志文件查看工具
- db文件查看工具SQLiteExpert
- hadoop命令 - 查看文件的block size
- Hadoop中查看一个文件位置信息
- hadoop fs -cat 不能查看文件
- readelf 工具 查看 库文件 执行文件
- hadoop-hdfs-文件工具类(Java)
- hadoop-hdfs-文件工具类(Scala)
- Linux 文件内容查看工具介绍
- Linux 文件内容查看工具介绍
- Linux 文件内容查看工具介绍
- 同步锁
- A/B HDU1576
- 有用过PHP SPL的吗,不知道这主要用来干嘛
- Java 基础
- spring boot security的简单学习demo
- Hadoop 文件查看工具
- Gartner全球IAAS市场报告:阿里云进入全球前三
- 我是如何利用Hadoop做大规模日志压缩的
- 深拷贝和浅拷贝
- POSIX定时器:timer_settime()的使用
- PI/4 dqpsk 非相干解调原理与matlab实现
- PHP SPL使用方法和他的威力
- xshell 无法连接ubuntu
- smart-rpc客户端