全局代码
Public Class PropertyOper
Inherits System.Collections.Hashtable
Public fileName As String = ""
Public Lst As System.Collections.ArrayList = New System.Collections.ArrayList()
Public Sub New(ByVal fileName As String)
Me.fileName = fileName
Me.Load(fileName)
End Sub
Public Overrides Sub Add(ByVal key As Object, ByVal value As Object)
MyBase.Add(key, value)
Lst.Add(key)
End Sub
Public Sub Update(ByVal key As Object, ByVal value As Object)
MyBase.Remove(key)
Lst.Remove(key)
Me.Add(key, value)
End Sub
Public Overrides ReadOnly Property Keys As System.Collections.ICollection
Get
Return Lst
End Get
End Property
Private Sub Load(ByVal filePath As String)
Dim convertBuf As Char() = New Char(1023) {}
Dim limit As Integer
Dim keyLen As Integer
Dim valueStart As Integer
Dim c As Char
Dim bufLine As String = String.Empty
Dim hasSep As Boolean
Dim precedingBackslash As Boolean
Using sr As io.StreamReader = New io.StreamReader(filePath)
While sr.Peek() >= 0
bufLine = sr.ReadLine()
limit = bufLine.Length
keyLen = 0
valueStart = limit
hasSep = False
precedingBackslash = False
If bufLine.StartsWith("#") Then keyLen = bufLine.Length
While keyLen < limit
c = bufLine(keyLen)
If (c = "="c OrElse c = ":"c) And Not precedingBackslash Then
valueStart = keyLen + 1
hasSep = True
Exit While
ElseIf (c = " "c OrElse c = vbTab OrElse c = vbFormFeed) And Not precedingBackslash Then
valueStart = keyLen + 1
Exit While
End If
If c = "\"c Then
precedingBackslash = Not precedingBackslash
Else
precedingBackslash = False
End If
keyLen += 1
End While
While valueStart < limit
c = bufLine(valueStart)
If c <> " "c AndAlso c <> vbTab AndAlso c <> vbFormFeed Then
If Not hasSep AndAlso (c = "="c OrElse c = ":"c) Then
hasSep = True
Else
Exit While
End If
End If
valueStart += 1
End While
Dim key As String = bufLine.Substring(0, keyLen)
Dim values As String = bufLine.Substring(valueStart, limit - valueStart)
If key = "" Then key += "#"
While key.StartsWith("#") And Me.Contains(key)
key += "#"
End While
Me.Add(key, values)
End While
End Using
End Sub
Public Sub Save()
Dim filePath As String = Me.fileName
If io.File.Exists(filePath) Then
io.File.Delete(filePath)
End If
Dim fileStream As io.FileStream = io.File.Create(filePath)
Dim sw As io.StreamWriter = New io.StreamWriter(fileStream)
For Each item As Object In Lst
Dim key As String = CType(item, String)
Dim val As String = CType(Me(key), String)
If key.StartsWith("#") Then
If val = "" Then
sw.WriteLine(key)
Else
sw.WriteLine(val)
End If
Else
sw.WriteLine(key & "=" + val)
End If
Next
sw.Close()
fileStream.Close()
End Sub
End Class
调用代码
Dim po As new PropertyOper(ProjectPath & "test.properties")
msgbox(po("key1"))
msgbox(po("key2"))
https://www.cnblogs.com/wardensky/p/5331851.html