zoukankan      html  css  js  c++  java
  • FtpHelper.cs

    网上找了好多,感觉还是自己这个使用起来方便点,记录一下!

      1 using System;
      2 using System.Collections;
      3 using System.IO;
      4 using System.Linq;
      5 using System.Net;
      6 using System.Text;
      7 
      8 namespace FtpTest.Common
      9 {
     10 
     11     public class FtpHelper
     12     {
     13         private readonly string _ftpUri;  //ftp服务器地址
     14         private readonly string _ftpName;  //ftp帐户
     15         private readonly string _ftpPwd;  //ftp密码
     16         private FtpWebRequest _ftpRequest;  //请求
     17         private FtpWebResponse _ftpResponse;  //响应
     18 
     19         public FtpHelper(string uri, string name, string password)
     20         {
     21             _ftpUri = uri;
     22             _ftpName = name;
     23             _ftpPwd = password;
     24         }
     25 
     26         /// <summary>
     27         /// 连接类
     28         /// </summary>
     29         /// <param name="uri">ftp地址</param>
     30         private void Conn(string uri)
     31         {
     32             _ftpRequest = (FtpWebRequest)WebRequest.Create(uri);
     33             //登录ftp服务器,ftpName:账户名,ftpPwd:密码
     34             _ftpRequest.Credentials = new NetworkCredential(_ftpName, _ftpPwd);
     35             _ftpRequest.UseBinary = true;  //该值指定文件传输的数据类型。
     36         }
     37 
     38         /// <summary>
     39         /// 删除文件
     40         /// </summary>
     41         /// <param name="fileName">文件名</param>
     42         public void DeleteFileName(string fileName)
     43         {
     44             string uri = _ftpUri + "/" + fileName;
     45             Conn(uri);
     46             try
     47             {
     48                 _ftpRequest.Method = WebRequestMethods.Ftp.DeleteFile;
     49                 _ftpResponse = (FtpWebResponse)_ftpRequest.GetResponse();
     50                 _ftpResponse.Close();
     51             }
     52             catch (Exception)
     53             {
     54                 // ignored
     55             }
     56         }
     57 
     58         /// <summary>
     59         /// 删除ftp上目录
     60         /// </summary>
     61         /// <param name="dirName"></param>
     62         public void RemoveDir(string dirName)
     63         {
     64             string uri = _ftpUri + "/" + dirName;
     65             Conn(uri);
     66             try
     67             {
     68                 _ftpRequest.Method = WebRequestMethods.Ftp.RemoveDirectory;
     69                 _ftpResponse = (FtpWebResponse)_ftpRequest.GetResponse();
     70                 _ftpResponse.Close();
     71             }
     72             catch (Exception)
     73             {
     74                 // ignored
     75             }
     76         }
     77 
     78         /// <summary>
     79         /// 上传文件,使用FTPWebRequest、FTPWebResponse实例
     80         /// </summary>
     81         /// <param name="uri">ftp地址</param>
     82         /// <param name="fileName">文件名</param>
     83         /// <param name="fileData">文件内容</param>
     84         /// <param name="msg">传出参数,返回传输结果</param>
     85         public void UploadFile(string uri, string fileName, byte[] fileData, out string msg)
     86         {
     87             string ftpUri = uri.EndsWith("/") ? uri : uri + "/";
     88             ftpUri += fileName;
     89             //连接ftp服务器
     90             Conn(ftpUri);
     91             _ftpRequest.Method = WebRequestMethods.Ftp.UploadFile;
     92             _ftpRequest.ContentLength = fileData.Length; //上传文件时通知服务器文件的大小
     93             try
     94             {
     95                 //将文件流中的数据(byte[] fileData)写入请求流
     96                 using (Stream ftpstream = _ftpRequest.GetRequestStream())
     97                 {
     98                     ftpstream.Write(fileData, 0, fileData.Length);
     99                 }
    100 
    101                 _ftpResponse = (FtpWebResponse)_ftpRequest.GetResponse(); //响应
    102                 msg = _ftpResponse.StatusDescription; //响应状态
    103                 _ftpResponse.Close();
    104             }
    105             catch (Exception exp)
    106             {
    107                 msg = "Failed to upload:" + exp.Message;
    108             }
    109         }
    110 
    111         /// <summary>
    112         /// 上传文件,使用WebClient类
    113         /// </summary>
    114         /// <param name="uri">ftp地址</param>
    115         /// <param name="fileName">文件名</param>
    116         /// <param name="fileData">文件内容</param>
    117         /// <param name="msg">传出参数,输出传输结果</param>
    118         public void UploadFileByWebClient(string uri, string fileName, byte[] fileData, out string msg)
    119         {
    120             string ftpUri = uri.EndsWith("/") ? uri : uri + "/";
    121             ftpUri += fileName;
    122 
    123             try
    124             {
    125                 WebClient client = new WebClient { Credentials = new NetworkCredential(_ftpName, _ftpPwd) };
    126                 //登录FTP服务
    127                 client.UploadData(ftpUri, "STOR", fileData); //指定为ftp上传方式
    128                 msg = "上传成功!";
    129             }
    130             catch (Exception exp)
    131             {
    132                 msg = "Failed to upload:" + exp.Message;
    133             }
    134         }
    135 
    136         /// <summary>
    137         /// 下载文件,使用FTPWebRequest、FTPWebResponse实例
    138         /// </summary>
    139         /// <param name="uri">ftp地址</param>
    140         /// <param name="destinationDir">目标文件存放地址</param>
    141         /// <param name="msg">传出参数,返回传输结果</param>
    142         public void DownloadFile(string uri, string destinationDir, out string msg)
    143         {
    144             string fileName = Path.GetFileName(uri);
    145             // ReSharper disable once AssignNullToNotNullAttribute
    146             string destinationPath = Path.Combine(destinationDir, fileName);
    147 
    148             try
    149             {
    150                 //连接ftp服务器
    151                 Conn(uri);
    152 
    153                 using (FileStream outputStream = new FileStream(destinationPath, FileMode.OpenOrCreate))
    154                 {
    155                     using (_ftpResponse = (FtpWebResponse)_ftpRequest.GetResponse())
    156                     {
    157                         //将响应流中的数据写入到文件流
    158                         using (Stream ftpStream = _ftpResponse.GetResponseStream())
    159                         {
    160                             int bufferSize = 2048;
    161                             byte[] buffer = new byte[bufferSize];
    162                             if (ftpStream != null)
    163                             {
    164                                 var readCount = ftpStream.Read(buffer, 0, bufferSize);
    165                                 while (readCount > 0)
    166                                 {
    167                                     outputStream.Write(buffer, 0, readCount);
    168                                     readCount = ftpStream.Read(buffer, 0, bufferSize);
    169                                 }
    170                             }
    171                         }
    172                         msg = _ftpResponse.StatusDescription;
    173                     }
    174                 }
    175             }
    176             catch (Exception exp)
    177             {
    178                 msg = "Failed to download:" + exp.Message;
    179             }
    180         }
    181 
    182         public byte[] DownloadFile()
    183         {
    184             try
    185             {
    186                 WebClient client = new WebClient { Credentials = new NetworkCredential(_ftpName, _ftpPwd) };
    187                 byte[] responseData = client.DownloadData(_ftpUri);
    188                 return responseData;
    189             }
    190             catch (Exception ex)
    191             {
    192                 // ReSharper disable once PossibleIntendedRethrow
    193                 throw ex;
    194             }
    195         }
    196 
    197         /// <summary>
    198         /// 文件下载,使用WebClient类
    199         /// </summary>
    200         /// <param name="uri">ftp服务地址</param>
    201         /// <param name="destinationDir">存放目录</param>
    202         public void DownloadFileByWebClient(string uri, string destinationDir)
    203         {
    204             string fileName = Path.GetFileName(uri);
    205             // ReSharper disable once AssignNullToNotNullAttribute
    206             string destinationPath = Path.Combine(destinationDir, fileName);
    207 
    208             try
    209             {
    210                 WebClient client = new WebClient { Credentials = new NetworkCredential(_ftpName, _ftpPwd) };
    211 
    212                 byte[] responseData = client.DownloadData(uri);
    213 
    214                 using (FileStream fileStream = new FileStream(destinationPath, FileMode.OpenOrCreate))
    215                 {
    216                     fileStream.Write(responseData, 0, responseData.Length);
    217                 }
    218             }
    219             catch (Exception)
    220             {
    221                 // ignored
    222             }
    223         }
    224 
    225         /// <summary>
    226         /// 遍历文件
    227         /// </summary>
    228         public ArrayList GetListDirectoryDetails()
    229         {
    230             ArrayList fileInfo = new ArrayList();
    231             try
    232             {
    233                 Conn(_ftpUri);
    234 
    235                 //获取 FTP 服务器上的文件的详细列表的 FTP LIST 协议方法
    236                 _ftpRequest.Method = WebRequestMethods.Ftp.ListDirectory;
    237                 try
    238                 {
    239                     _ftpResponse = (FtpWebResponse)_ftpRequest.GetResponse(); //响应
    240                 }
    241                 catch (WebException)
    242                 {
    243                 }
    244                 catch (InvalidOperationException)
    245                 {
    246                 }
    247 
    248                 using (Stream responseStream = _ftpResponse.GetResponseStream())
    249                 {
    250                     // ReSharper disable once AssignNullToNotNullAttribute
    251                     using (StreamReader reader = new StreamReader(responseStream))
    252                     {
    253                         string line = reader.ReadLine();
    254                         while (line != null)
    255                         {
    256                             fileInfo.Add(line);
    257                             line = reader.ReadLine();
    258                         }
    259                     }
    260                 }
    261             }
    262             catch (Exception)
    263             {
    264                 // ignored
    265             }
    266 
    267             return fileInfo;
    268         }
    269 
    270         /// <summary>
    271         /// 上传图片
    272         /// </summary>
    273         /// <param name="mstr"></param>
    274         /// <param name="ftpUri"></param>
    275         /// <returns></returns>
    276         public bool Upload(MemoryStream mstr, string ftpUri)
    277         {
    278             try
    279             {
    280                 FtpWebRequest ftp = (FtpWebRequest)WebRequest.Create(ftpUri);
    281                 ftp.Credentials = new NetworkCredential(_ftpName, _ftpPwd);
    282                 ftp.Method = WebRequestMethods.Ftp.UploadFile;
    283                 ftp.UseBinary = true;
    284                 ftp.UsePassive = true;
    285                 using (Stream stream = ftp.GetRequestStream())
    286                 {
    287                     byte[] bytes = mstr.ToArray();
    288                     stream.Write(bytes, 0, bytes.Length);
    289                     stream.Close();
    290                     mstr.Close();
    291                 }
    292                 return true;
    293             }
    294             catch (Exception)
    295             {
    296                 return false;
    297             }
    298         }
    299 
    300         public bool Upload(byte[] mstr, string ftpUri)
    301         {
    302             try
    303             {
    304                 FtpWebRequest ftp = (FtpWebRequest)WebRequest.Create(ftpUri);
    305                 ftp.Credentials = new NetworkCredential(_ftpName, _ftpPwd);
    306                 ftp.Method = WebRequestMethods.Ftp.UploadFile;
    307                 ftp.UseBinary = true;
    308                 ftp.UsePassive = true;
    309                 using (Stream stream = ftp.GetRequestStream())
    310                 {
    311                     stream.Write(mstr, 0, mstr.Length);
    312                     stream.Close();
    313                 }
    314                 return true;
    315             }
    316             catch (Exception)
    317             {
    318                 return false;
    319             }
    320         }
    321 
    322         /// <summary>
    323         /// 重命名文件
    324         /// </summary>
    325         /// <param name="fileName">原文件名</param>
    326         /// <param name="reNameFileName">新文件名</param>
    327         public bool RenameFileName(string fileName, string reNameFileName)
    328         {
    329             bool result = true;
    330             FtpWebRequest ftp = (FtpWebRequest)WebRequest.Create(reNameFileName);
    331             ftp.Credentials = new NetworkCredential(_ftpName, _ftpPwd);
    332             try
    333             {
    334                 ftp.Method = WebRequestMethods.Ftp.Rename;
    335                 ftp.RenameTo = fileName;
    336                 ftp.UseBinary = true;
    337                 ftp.UsePassive = true;
    338                 _ftpResponse = (FtpWebResponse)ftp.GetResponse();
    339                 Stream ftpStream = _ftpResponse.GetResponseStream();
    340                 // ReSharper disable once PossibleNullReferenceException
    341                 ftpStream.Close();
    342                 _ftpResponse.Close();
    343             }
    344             catch (Exception)
    345             {
    346                 result = false;
    347             }
    348 
    349             return result;
    350         }
    351 
    352         /// <summary>
    353         /// 删除文件
    354         /// </summary>
    355         /// <param name="fileName">文件名</param>
    356         public bool DeleteFile(string fileName)
    357         {
    358             bool result = true;
    359             FtpWebRequest ftp = (FtpWebRequest)WebRequest.Create(fileName);
    360             ftp.Credentials = new NetworkCredential(_ftpName, _ftpPwd);
    361             try
    362             {
    363                 ftp.Method = WebRequestMethods.Ftp.DeleteFile;
    364                 ftp.UseBinary = true;
    365                 ftp.UsePassive = true;
    366                 _ftpResponse = (FtpWebResponse)ftp.GetResponse();
    367                 Stream ftpStream = _ftpResponse.GetResponseStream();
    368                 // ReSharper disable once PossibleNullReferenceException
    369                 ftpStream.Close();
    370                 _ftpResponse.Close();
    371             }
    372             catch (Exception)
    373             {
    374                 result = false;
    375             }
    376 
    377             return result;
    378         }
    379 
    380         /// <summary>
    381         /// 创建目录
    382         /// </summary>
    383         /// <param name="dri"></param>
    384         /// <returns></returns> 
    385         public bool FtpMakeDir(string dri)
    386         {
    387             FtpWebRequest req = (FtpWebRequest)WebRequest.Create(dri);
    388             req.Credentials = new NetworkCredential(_ftpName, _ftpPwd);
    389             req.Method = WebRequestMethods.Ftp.MakeDirectory;
    390             try
    391             {
    392                 FtpWebResponse response = (FtpWebResponse)req.GetResponse();
    393                 response.Close();
    394             }
    395             catch (Exception)
    396             {
    397                 req.Abort();
    398                 return false;
    399             }
    400             req.Abort();
    401             return true;
    402         }
    403 
    404         /// <summary>
    405         /// 创建多级目录
    406         /// </summary>
    407         /// <param name="ftppath">目录,例如:/aaa/bbb/ccc </param>
    408         public bool FtpMakeDirs(string ftppath)
    409         {
    410             string targetPath = _ftpUri;
    411             var pathArray = ftppath.Split('/');
    412 
    413             try
    414             {
    415                 //遍历判断文件夹是否存在 
    416                 foreach (var path in pathArray)
    417                 {
    418                     if (!string.IsNullOrEmpty(path.Trim()))
    419                     {
    420                         //不存在此层文件夹  
    421                         if (!DirectoryExist(targetPath, path))
    422                             FtpMakeDir(targetPath + "/" + path);
    423 
    424                         targetPath += "/" + path;
    425                     }
    426                 }
    427             }
    428             catch (Exception)
    429             {
    430                 return false;
    431             }
    432 
    433             return true;
    434         }
    435 
    436         /// <summary>
    437         /// 下载
    438         /// </summary>
    439         /// <param name="fileName"></param>
    440         public byte[] Download(string fileName)
    441         {
    442             byte[] buffer = null;
    443             try
    444             {
    445                 // ReSharper disable once AccessToStaticMemberViaDerivedType
    446                 var reqFtp = (FtpWebRequest)FtpWebRequest.Create(new Uri(_ftpUri + "/" + fileName));
    447                 reqFtp.Method = WebRequestMethods.Ftp.DownloadFile;
    448                 reqFtp.UseBinary = true;
    449                 reqFtp.Credentials = new NetworkCredential(_ftpName, _ftpPwd);
    450                 FtpWebResponse response = (FtpWebResponse)reqFtp.GetResponse();
    451                 Stream ftpStream = response.GetResponseStream();
    452                 int bufferSize = 51200; //Convert.ToInt32(GetFileSize(fileName)) + 51200;//
    453                 buffer = new byte[bufferSize];
    454                 // ReSharper disable once PossibleNullReferenceException
    455                 var readCount = ftpStream.Read(buffer, 0, bufferSize);
    456 
    457                 while (readCount > 0)
    458                 {
    459                     readCount = ftpStream.Read(buffer, 0, bufferSize);
    460                 }
    461                 ftpStream.Close();
    462                 response.Close();
    463             }
    464             catch (Exception)
    465             {
    466                 // ignored
    467             }
    468 
    469             return buffer;
    470         }
    471 
    472         /// <summary>
    473         /// 获取当前目录下明细(包含文件和文件夹)
    474         /// </summary>
    475         /// <returns></returns>
    476         public string[] GetFilesDetailList(string targetPath)
    477         {
    478             var tempftpUri = targetPath;
    479 
    480             try
    481             {
    482                 StringBuilder result = new StringBuilder();
    483 
    484                 Conn(tempftpUri);
    485                 //获取 FTP 服务器上的文件的详细列表的 FTP LIST 协议方法
    486                 _ftpRequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
    487 
    488                 WebResponse response = _ftpRequest.GetResponse();
    489                 // ReSharper disable once AssignNullToNotNullAttribute
    490                 StreamReader reader = new StreamReader(response.GetResponseStream());
    491                 string line = reader.ReadLine();
    492 
    493                 while (line != null)
    494                 {
    495                     result.Append(line);
    496                     result.Append("
    ");
    497                     line = reader.ReadLine();
    498                 }
    499 
    500                 result.Remove(result.ToString().LastIndexOf("
    ", StringComparison.Ordinal), 1);
    501                 reader.Close();
    502                 response.Close();
    503 
    504                 return result.ToString().Split('
    ');
    505             }
    506             catch (Exception)
    507             {
    508                 var downloadFiles = new string[] { };
    509                 return downloadFiles;
    510             }
    511         }
    512 
    513         /// <summary>
    514         /// 获取当前目录下所有的文件夹列表(仅文件夹)
    515         /// </summary>
    516         /// <returns></returns>
    517         public string[] GetDirectoryList(string targetPath)
    518         {
    519             string[] drectory = GetFilesDetailList(targetPath);
    520             string m = "";
    521             if (drectory != null && true & drectory.Any())
    522             {
    523                 foreach (string str in drectory)
    524                 {
    525                     int dirPos = str.IndexOf("<DIR>", StringComparison.Ordinal);
    526                     if (dirPos > 0)
    527                     {
    528                         /*判断 Windows 风格*/
    529                         m += str.Substring(dirPos + 5).Trim() + "
    ";
    530                     }
    531                     else if (str.Trim().Substring(0, 1).ToUpper() == "D")
    532                     {
    533                         /*判断 Unix 风格*/
    534                         string dir = str.Substring(56).Trim();
    535                         if (dir != "." && dir != "..")
    536                         {
    537                             m += dir + "
    ";
    538                         }
    539                     }
    540                 }
    541             }
    542             char[] n = new char[] { '
    ' };
    543             return m.Split(n);
    544         }
    545 
    546         /// <summary>
    547         /// 判断当前目录下指定的子目录是否存在
    548         /// modified at 2015/4/7 修改判断是否存在的方法,以前的方式过于臃肿,还有bug(竟然使用listdetail!)
    549         /// </summary>
    550         /// <param name="targetPath">服务器地址</param>
    551         /// <param name="remoteDirectoryName">指定的目录名</param>
    552         public bool DirectoryExist(string targetPath, string remoteDirectoryName)
    553         {
    554             try
    555             {
    556                 var uri = Path.Combine(targetPath, remoteDirectoryName).Replace(@"", @"/");
    557                 Conn(uri);
    558                 _ftpRequest.Method = WebRequestMethods.Ftp.ListDirectory;
    559 
    560                 using (var response = (FtpWebResponse)_ftpRequest.GetResponse())
    561                 // ReSharper disable once AssignNullToNotNullAttribute
    562                 // ReSharper disable once UnusedVariable
    563                 using (var stream = new StreamReader(response.GetResponseStream()))
    564                 {
    565                 }
    566                 return true;
    567             }
    568             catch (Exception)
    569             {
    570                 // ignored
    571             }
    572 
    573             return false;
    574         }
    575 
    576         /// <summary>
    577         /// 获取指定文件大小
    578         /// </summary>
    579         /// <param name="filename"></param>
    580         /// <returns></returns>
    581         public long GetFileSize(string filename)
    582         {
    583             long fileSize = 0;
    584             try
    585             {
    586                 // ReSharper disable once AccessToStaticMemberViaDerivedType
    587                 var reqFtp = (FtpWebRequest)FtpWebRequest.Create(new Uri(_ftpUri + "/" + filename));
    588 
    589                 reqFtp.Method = WebRequestMethods.Ftp.GetFileSize;
    590                 reqFtp.UseBinary = true;
    591                 reqFtp.Credentials = new NetworkCredential(_ftpName, _ftpPwd);
    592 
    593                 FtpWebResponse response = (FtpWebResponse)reqFtp.GetResponse();
    594                 Stream ftpStream = response.GetResponseStream();
    595                 fileSize = response.ContentLength;
    596 
    597                 // ReSharper disable once PossibleNullReferenceException
    598                 ftpStream.Close();
    599                 response.Close();
    600             }
    601             catch (Exception)
    602             {
    603                 // ignored
    604             }
    605 
    606             return fileSize;
    607         }
    608 
    609         /// <summary>
    610         /// 获取当前目录下文件列表(仅文件)
    611         /// </summary>
    612         /// <returns></returns>
    613         public string[] GetFileList(string mask)
    614         {
    615             StringBuilder result = new StringBuilder();
    616             try
    617             {
    618                 // ReSharper disable once AccessToStaticMemberViaDerivedType
    619                 var reqFtp = (FtpWebRequest)FtpWebRequest.Create(new Uri(_ftpUri));
    620                 reqFtp.UseBinary = true;
    621                 reqFtp.Credentials = new NetworkCredential(_ftpName, _ftpPwd);
    622                 reqFtp.Method = WebRequestMethods.Ftp.ListDirectory;
    623                 WebResponse response = reqFtp.GetResponse();
    624                 // ReSharper disable once AssignNullToNotNullAttribute
    625                 StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default);
    626 
    627                 string line = reader.ReadLine();
    628                 while (line != null)
    629                 {
    630                     if (mask.Trim() != string.Empty && mask.Trim() != "*.*")
    631                     {
    632                         var masks = mask.Substring(0, mask.IndexOf("*", StringComparison.Ordinal));
    633                         if (line.Substring(0, masks.Length) == masks)
    634                         {
    635                             result.Append(line);
    636                             result.Append("
    ");
    637                         }
    638                     }
    639                     else
    640                     {
    641                         result.Append(line);
    642                         result.Append("
    ");
    643                     }
    644                     line = reader.ReadLine();
    645                 }
    646                 result.Remove(result.ToString().LastIndexOf('
    '), 1);
    647                 reader.Close();
    648                 response.Close();
    649                 return result.ToString().Split('
    ');
    650             }
    651             catch (Exception ex)
    652             {
    653                 if (ex.Message.Trim() != "远程服务器返回错误: (550) 文件不可用(例如,未找到文件,无法访问文件)。")
    654                 {
    655                 }
    656                 return null;
    657             }
    658         }
    659 
    660         /// <summary>
    661         /// 判断文件是否存在
    662         /// </summary>
    663         /// <param name="filename"></param>
    664         /// <returns></returns>
    665         public bool FileExist(string filename)
    666         {
    667             bool result;
    668             WebResponse response = null;
    669             try
    670             {
    671                 WebRequest req = WebRequest.Create(filename);
    672                 response = req.GetResponse();
    673                 result = true;
    674             }
    675             catch (Exception)
    676             {
    677                 result = false;
    678             }
    679             finally
    680             {
    681                 response?.Close();
    682             }
    683 
    684             return result;
    685         }
    686     }
    687 }

    Test:

    1、创建多级目录:

     1             string targetPath = "ftp://192.168.1.148/";
     2             string ftpUserName = "ftpuser";
     3             string ftpPassword = "123456";
     4             
     5             var path = "1234/1234/1234";
     6             FtpHelper ftpHelper = new FtpHelper(targetPath , ftpUserName, ftpPassword);
     7             try
     8             {
     9                 ftpHelper.FtpMakeDirs(path);
    10             }
    11             catch (Exception ex)
    12             {
    13                 Console.Write(ex.Message);
    14             }
  • 相关阅读:
    [LeetCode] 399. Evaluate Division Java
    图的遍历
    [LeetCode] 332. Reconstruct Itinerary Java
    [LeetCode] 310. Minimum Height Trees Java
    sql like 查询
    递归树
    用SQL语句,删除掉重复项只保留一条
    Exception in thread “main” com.google.gson.JsonSyntaxException: java.lang.NumberFormatException: empty String
    如何利用java得到当前的时间和前一天的时间
    Java 字符串用逗号并接
  • 原文地址:https://www.cnblogs.com/LiuLiangXuan/p/6710070.html
Copyright © 2011-2022 走看看